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...
Пока на собственное сообщение не было ответов, его можно удалить.