Установка GAC на каждой сборке - как это сделать надежно - PullRequest
5 голосов
/ 01 ноября 2010

Я хотел бы надежно автоматически установить сборки приложений в GAC при компиляции приложения с использованием Visual Studio.Я настроил события до и после сборки в сборке моего веб-приложения.

Событие до сборки:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\gacutil.exe" /f /ul Uninstall.Gac.txt

Событие после сборки:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\gacutil.exe" /f /il Install.Gac.txt
%windir%\system32\inetsrv\appcmd.exe recycle apppool -apppool.name:"Sharepoint IIS WebApps"

КакВы можете видеть, что я также перерабатываю пул веб-приложений, чтобы новые сборки начали работать.

Проблема, с которой я столкнулся, заключается в том, что это очень ненадежный процесс.В случае сбоя моего веб-приложения моя следующая сборка не удастся, потому что не удастся удалить (пост-сборка не выполнялась в предыдущей сборке) ... И т. Д.

Я бы хотел сделать этот процесс максимально надежным,Я хотел бы условно деинсталлировать и сборки, если они присутствуют, и принудительно устанавливать независимо от того, там они или нет ... Но событие перед сборкой все еще важно по следующей причине:

Важно

Важно, чтобы все мои сборки были полностью удалены перед сборкой, иначе они не будут скопированы в мой выходной каталог (так как компилятор находит их в GAC), поэтому установка GAC завершится неудачно, так как он не может найти сборки в выходных данных \Папка bin.

Как мне надежно выполнить удаление и установку GAC в моей сборке веб-приложения?

Ответы [ 2 ]

2 голосов
/ 28 ноября 2010

Вместо того, чтобы полагаться на инструмент GACUTIL, не могли бы вы запрограммировать установку / удаление GAC? С помощью кода вы можете по крайней мере полагаться на коды ошибок hresults и реагировать соответствующим образом.

Информацию об GAC API можно найти здесь:

http://blogs.msdn.com/b/junfeng/archive/2004/09/14/229649.aspx

0 голосов
/ 26 ноября 2010

Если сборка прошла успешно, скопируйте выходные сборки в другой каталог и оттуда установите в GAC.И в предварительной сборке используйте этот каталог для удаления этих сборок из GAC.

Таким образом, никогда не должно быть никаких сборок в GAC во время компиляции.Вы можете настроить посткомпоновку так, чтобы копировать двоичные файлы, только если все они были успешно собраны путем проверки в пакетном файле, если все выходные файлы EXIST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...