Ошибка при добавлении файла политики в GAC.
Вопрос
Я пытаюсь добавить файл политики издателя в gac согласно этому нить но у меня возникают проблемы при попытке добавить файл на тестовый сервер.
Я получаю сообщение «Не удалось найти модуль, указанный в манифесте сборки «policy.3.0.assemblyname.dll»»
Мой файл политики выглядит так:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="*assemblyname*"
publicKeyToken="7a19eec6f55e2f84"
culture="neutral" />
<bindingRedirect oldVersion="3.0.0.0"
newVersion="3.0.0.1"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Пожалуйста помоги!
Спасибо
Бен
Я воссоздал проблему с нуля с помощью новой сборки, которая сама по себе не имеет зависимостей (кроме значений по умолчанию) - все отлично работает на моей локальной машине разработки (и перенаправление тоже нормально), но выдает ту же ошибку при добавлении файла политики в GAC. на сервере!
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="TestAsm"
publicKeyToken="5f55456fdcc9b528"
culture="neutral" />
<bindingRedirect oldVersion="3.0.0.0"
newVersion="3.0.0.1"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
связано следующим образом
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\al.exe /link:PublisherPolicy.xml /out:policy.3.0.TestAsm.dll /keyfile:..\..\key.snk /version:3.0.0.0
pause
Пожалуйста помоги!
Решение
Вау - ок, понял.
Мне следовало бы обратить больше внимания на то, что именно это означает.
(MSDN) Как:Создайте политику издателя
Важная заметка:Политика издателя сборка не может быть добавлена к глобальному сборка кэша, если оригинал файл политики издателя находится в тот же каталог, что и сборка.
Это требование, честно говоря, настолько странное, что оно не было принято во внимание.Исходный файл политики, который был скомпилирован в сборку, которую я пытаюсь добавить в gac, должен находиться в той же папке, что и сборка политики, когда вы добавляете сборку политики.
Другие советы
Хорошо... просто хочу проверить некоторые основы....
У вас точно установлены обе версии зависимой сборки в GAC?
И проверили ли вы, что номера версий в [сборке:Атрибут AssemblyVersion()] верен.
И вы использовали [сборку: Версия сборки()] и НЕТ [сборка: СборкаФайлВерсия("1.0.0.1")].
Обновлять: Моя ошибка, нужна только последняя версия сборки в GAC.Я только что попробовал это здесь, и это работает.Моя единственная мысль - проверить, совпадают ли токены открытого ключа и не ошиблись ли вы в имени сборки.
Также при создании файла политики обязательно используйте переключатель /version в компоновщике сборки, чтобы явно установить номер версии 3.0.0.0. И не указывайте переключатель /platform.например
al.exe /link:assembly.config /out:policy.3.0.assembly.dll
/keyfile:mykey.snk /version:3.0.0.0
Чтобы добавить сборки политики в GAC с помощью Wise, вы делаете то же самое, что и для добавления сборки, для которой предназначена политика.Таким образом, вы добавляете сборку политики в «Глобальный кэш сборок» в Wise, и пока у вас есть файл политики (.config) в том же месте на компьютере, Wise также автоматически добавит его в GAC.