Знатокам ASP.NET локализации
От: V.V.S.  
Дата: 21.06.05 15:13
Оценка:
Всем привет.
Задача состоит в следующем надо перевести Microsoft CRM
Microsoft работает через русурсы явно.
при этом библиотека называется
Microsoft.Crm.Application.Components.Resources.dll
там внутри ничего нету кроме ресурса под названием
Microsoft.Crm.Application.Components.crm.resources
ассембли тоже называется Microsoft.Crm.Application.Components.Resources

на сколько японял чтобы локализовать надо создать длл
с названием
Microsoft.Crm.Application.Components.Resources.ru-RU.dll
Ассембли нейм сделал Microsoft.Crm.Application.Components.Resources
мнутри сделал такойже ресурс
Microsoft.Crm.Application.Components.crm.resources
точ в точ
фактически отличаются только именем файла
и положил в bin директорию Microsoft CRM
в веб конфиге написал

<globalization culture="ru-Ru" uiCulture="ru-Ru"/>

Среда начинает матюкаться
Parser Error Message: The located assembly's manifest definition with name 'Microsoft.Crm.Application.Components.ru-RU' does not match the assembly reference.

Source Error:


Line 203: <add assembly="System.EnterpriseServices, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
Line 204: <add assembly="System.Web.Mobile, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
Line 205: <add assembly="*"/>
Line 206: </assemblies>
Line 207: </compilation>

Assembly Load Trace: The following information can be helpful to determine why the assembly 'Microsoft.Crm.Application.Components.ru-RU' could not be loaded.


=== Pre-bind state information ===
LOG: DisplayName = Microsoft.Crm.Application.Components.ru-RU
(Partial)
LOG: Appbase = file:///C:/Inetpub/CRM
LOG: Initial PrivatePath = bin
Calling assembly : (Unknown).
===

LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Post-policy reference: Microsoft.Crm.Application.Components.ru-RU
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary ASP.NET Files/root/64cdac6f/119624ab/Microsoft.Crm.Application.Components.ru-RU.DLL.
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary ASP.NET Files/root/64cdac6f/119624ab/Microsoft.Crm.Application.Components.ru-RU/Microsoft.Crm.Application.Components.ru-RU.DLL.
LOG: Attempting download of new URL file:///C:/Inetpub/CRM/bin/Microsoft.Crm.Application.Components.ru-RU.DLL.
WRN: Comparing the assembly name resulted in the mismatch: NAME


что не правильно делаю?
вобще я раньше когдато делал локализацию на какомто сайте
делал таким образом
создавал папку RU
ну и туда складывал файл с такимже именем как в bin
Только названия ресурсов в нем были другими например
ресурс Microsoft.Crm.Application.Components.crm.resources
у меня он назывался Microsoft.Crm.Application.Components.crm.ru.resources
вобщем так я тоже пробовал и еще миллион способов
и читал в мсдне
в своем проекте работает нормально в этом СРМЕ не работает

Помогайте
Заранее благодарен.
Re: Знатокам ASP.NET локализации
От: GarryIV  
Дата: 21.06.05 21:20
Оценка:
Hello, V.V.S.!

VS> Всем привет.

VS> Задача состоит в следующем надо перевести Microsoft CRM
VS> Microsoft работает через русурсы явно.
VS> при этом библиотека называется
VS> Microsoft.Crm.Application.Components.Resources.dll
VS> там внутри ничего нету кроме ресурса под названием
VS> Microsoft.Crm.Application.Components.crm.resources
VS> ассембли тоже называется Microsoft.Crm.Application.Components.Resources

VS> на сколько японял чтобы локализовать надо создать длл

VS> с названием
VS> Microsoft.Crm.Application.Components.Resources.ru-RU.dll
VS> Ассембли нейм сделал Microsoft.Crm.Application.Components.Resources
VS> мнутри сделал такойже ресурс
VS> Microsoft.Crm.Application.Components.crm.resources
VS> точ в точ
VS> фактически отличаются только именем файла
VS> и положил в bin директорию Microsoft CRM
VS> в веб конфиге написал

А эта Microsoft.Crm.Application.Components.Resources.dll случаем не подписана? А то свою надо тоже подписать. Причем АФАИР этим же ключом...
Posted via RSDN NNTP Server 1.9
WBR, Igor Evgrafov
Re[2]: Знатокам ASP.NET локализации
От: V.V.S.  
Дата: 22.06.05 03:44
Оценка:
Здравствуйте, GarryIV, Вы писали:

GIV>Hello, V.V.S.!


GIV>А эта Microsoft.Crm.Application.Components.Resources.dll случаем не подписана? А то свою надо тоже подписать. Причем АФАИР этим же ключом...


В манифесте сборки есть строки
.custom instance void [mscorlib]System.Reflection.AssemblyKeyFileAttribute::.ctor(string) = ( 01 00 36 64 3A 5C 44 72 6F 70 73 5C 33 32 39 37 // ..6d:\Drops\3297
5C 73 68 69 70 5C 4C 6F 63 61 6C 69 7A 65 5C 54 // \ship\Localize\T
65 6D 70 5C 4D 53 53 68 61 72 65 64 4C 69 62 53 // emp\MSSharedLibS
4E 31 30 32 34 2E 73 6E 6B 00 00 ) // N1024.snk..

отсюда видно что сборка подписана
MSSharedLibSN1024.snk..

Это что получается что теперь нельзя будет локализовать сборку?
На сколько я знаю подпись нужна для целостности самой сборки.
Это каким образом происходит проверка что две сборки подписаны одним и тем же ключем?

Нашел на форуме некий Oberezhinskiy писал тоже самое


У меня есть дллька с ресурсами(строковые значения, которые используются в приложении ASP.NET)
мне нужно изменить некоторые строки в этой дллке, как мне это сделать без вреда для приложения???
Я пробовал менять строки но после этого приложение не хочет загружать эту длльку(просто заменял один символ на другой)!
Это все мне нужно для руссификации приложения!!(Microsoft CRM )


Но с одним исключением он пытался изменять существующую

На что ему AndrewVK отвечал

Но на самом деле это криво. Тебе надо создать новую сателлитную сборку. Называться она должна ГлавнаяСборка.ru-RU.dll. В ней должны находится такие же ресурсы (с таким же идентификатором), но с русскими значениями.
По имени. При обращении к ресурсам на диске ищется сборка с именем
ИмяОсновнойСборки.ИмяТекущейКультурыПотока.dll. Если она не найдена используется основная сборка


Oberezhinskiy

Спасибо за легбез, уже кое что получилось!!!!


Интересно как у него это получилось???
Все ресурсы СРМ лежат именно в этой сборке
именно ее он мог только локализоваывать.Может чтото надо в веб конфиге прописывать чтоб не было какихто лишних проверок и.т.д.

Заранее благодарен.
Re[3]: Знатокам ASP.NET локализации
От: GarryIV  
Дата: 22.06.05 05:49
Оценка:
Hello, V.V.S.!

GIV>> А эта Microsoft.Crm.Application.Components.Resources.dll случаем не

GIV>> подписана? А то свою надо тоже подписать. Причем АФАИР этим же
GIV>> ключом...

VS> В манифесте сборки есть строки

VS> .custom instance void
VS> [mscorlib]System.Reflection.AssemblyKeyFileAttribute::.ctor(string) = (
[Sorry, skipped]
VS> Интересно как у него это получилось???
VS> Все ресурсы СРМ лежат именно в этой сборке
VS> именно ее он мог только локализоваывать.Может чтото надо в веб конфиге
VS> прописывать чтоб не было какихто лишних проверок и.т.д.

Security and Localized Satellite Assemblies
If your main assembly uses strong naming, satellite assemblies must be signed with the same private key as the main assembly. If the public/private key pair does not match between the main and satellite assemblies, your resources will not be loaded. For information about strong names, see Strong Name Scenario. For more information on signing assemblies, see Signing an Assembly with a Strong Name.
In general, you may need to have your organization's signing group or an external signing organization sign with the private key. This is due to the sensitive nature of the private key: access is often restricted to a few individuals. You can use delayed signing during development. For more information, see Delay Signing an Assembly.

Posted via RSDN NNTP Server 1.9
WBR, Igor Evgrafov
Re[4]: Знатокам ASP.NET локализации
От: V.V.S.  
Дата: 22.06.05 09:26
Оценка:
Здравствуйте, GarryIV, Вы писали:

GIV>

GIV>Security and Localized Satellite Assemblies
GIV>[b]If your main assembly uses strong naming, satellite assemblies must be signed with the same private key as the main assemblyGIV>

Спасибо большое
Занчит не судьба((
Re[5]: Знатокам ASP.NET локализации
От: andrew_z  
Дата: 07.12.05 08:13
Оценка:
Здорово народ, по части "Значит не судьба((" это вы зря сдались:

в .NET есть понятие "отложенное подписание (delayed signing)", т.е. можно компоновать сборку с открытым ключом компании, не требуя закрытого ключа. Это можно указать с помощью атрибутов AssemblyKeyFileAttribute и DelaySignAttribute. Поскольку эта сборка не будет иметь действительной цифровой подписи, то в GAC ее не запихнешь. Чтобы GAC ее схавал необходимо запретить системе проверку целостности файлов сборки с помощью утилиты SN.exe с ключом -Vr для данной сборки и останется только закинуть эту сборку в GAC через gacutil.exe.

У меня все это получилось следующим образом, я дизасемблировал сборку (через ildasm) Microsoft.Crm.Application.Components.Resources.dll, оказалось что у нее уже были установленные параметры AssemblyKeyFileAttribute и DelaySignAttribute как и требовалось:

custom instance void [mscorlib]System.Reflection.AssemblyKeyFileAttribute::.ctor(string) = ( 01 00 36 63 3A 5C 62 75 69 6C 64 74 65 73 74 5C // ..6c:\buildtest\
4A 75 6C 79 36 5C 4C 6F 63 61 6C 69 7A 65 5C 54 // July6\Localize\T
65 6D 70 5C 4D 53 53 68 61 72 65 64 4C 69 62 53 // emp\MSSharedLibS
4E 31 30 32 34 2E 73 6E 6B 00 00 ) // N1024.snk..
.custom instance void [mscorlib]System.Reflection.AssemblyDelaySignAttribute::.ctor(bool) = ( 01 00 01 00 00 )

Reflector.exe показал что атрибут AssemblyDelaySign = true, т.е. то что нужно,

после отредактировал полученный ресурс с помощью Resourcer.exe и скомпилировал все это хозяйство обратно (ilasm).
Поскольку я не менял ни версии сборки, ни ее название, ни ее public key, то все должно быть нормально.
А дальше все просто, на сервере, где стоит сайт CRM,
заменил dll на свою, выполнил следующие команды
sn.exe -Vr с:\www\bin\Microsoft.Crm.Application.Components.Resources.dll
gacutil.exe /i с:\www\bin\Microsoft.Crm.Application.Components.Resources.dll

После этой экзекуции сайт заработал (единственное, если вы просто переименуете старую версию dll и оставите в папке bin CRM будет ругаться, поэтому ее лучше убрать в какое-нибудь другое место).

Вот и все .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.