У меня есть проект, в котором используется Pkcs12ProtectedConfigurationProvider. Никогда не было проблем с использованием этой dll в лазури при нацеливании на Windows Server 2008 sp2 или r2. Однако, когда я попытался выполнить развертывание на Azure с помощью Windows Server 2012 (osFamily="3"), я получил исключение о том, что сборка не может быть найдена.
Я смутно припоминаю, что столкнулся с этим в эмуляторе, и решение состояло в том, чтобы добавить эту dll в GAC. Я поискал в Google и нашел эти инструкции о том, как для установки библиотеки DLL в GAC в качестве задачи запуска Azure. Все работает, пока у меня есть gacutil и связанный с ним файл .cmd в корне проекта веб-роли. Однако я хочу переместить это в папку приложения /startup, где у меня есть другие команды запуска.
До сих пор мне не удалось заставить это работать. gacutil также не очень полезен, так как я не смог заставить его отображать какой-либо вывод после запуска команд против него. Вот что я пробовал:
в файле csdef:
<Startup>
<!-- other tasks, such as disabling the IIS idle timeout -->
<Task commandLine="startup\gacRegistrations.cmd" executionContext="elevated" taskType="simple" />
</Startup>
в файле gacRegistrations.cmd:
gacutil /nologo /i ..\PKCS12ProtectedConfigurationProvider.dll
exit /b 0
Я думаю, что проблема связана с синтаксисом, ссылающимся на местоположение dll в файле cmd. Все соответствующие файлы настроены на действие сборки: нет и копирование в выходной каталог: всегда копировать. Однако файлы gacutil.exe и cmd копируются в папку webrole/bin/startup, тогда как файл PKCS12ProtectedConfigurationProvider.dll находится на 1 папку выше в папке webrole/bin.
Какой здесь правильный синтаксис? Должен ли я попробовать gacutil /nologo /i ..\.\PKCS12ProtectedConfigurationProvider.dll
? Как я уже сказал, все работает нормально, когда файлы не вложены в каталог /startup.