5

Visual Studioを使用してアプリケーションをコンパイルするときに、アプリケーションアセンブリをGACに確実に自動インストールしたいと思います。Webアプリケーションのビルドでビルド前とビルド後のイベントを設定しました。

ビルド前のイベント:

"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"

ご覧のとおり、新しいアセンブリが機能し始めるために、Webアプリケーションプールもリサイクルしています。

私が抱えている問題は、これが非常に信頼性の低いプロセスであるということです。Webアプリケーションが失敗した場合、アンインストールが失敗するため、次のビルドは失敗します(ビルド後は前のビルドで実行されませんでした)...など。

このプロセスを可能な限り信頼できるものにしたいと思います。アセンブリが存在する場合は条件付きでアンインストールし、存在するかどうかに関係なく強制的にインストールしたいと思います...しかし、次の理由から、ビルド前のイベントは依然として重要です。

重要

ビルドが行われる前にすべてのアセンブリが完全にアンインストールされることが重要です。そうしないと、出力ディレクトリにコピーされません(コンパイラがGACでアセンブリを検出するため)。したがって、GACのインストールは、出力\binフォルダにアセンブリが見つからないため失敗します。

WebアプリケーションビルドでGACのアンインストールとインストールを確実に行うにはどうすればよいですか?

4

2 に答える 2

2

GACUTIL ツールだけに頼る代わりに、GAC のインストール/アンインストールをプログラミングできませんでしたか? コードを使用すると、少なくとも hresults エラー コードに依存し、それに応じて対応できます。

GAC API に関する情報は、次の場所にあります。

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

于 2010-11-28T12:09:38.933 に答える
0

ビルドが成功したら、出力アセンブリを別のディレクトリにコピーし、そこから GAC にインストールします。また、ビルド前にこのディレクトリを使用して、これらのアセンブリを GAC から削除します。

このようにして、コンパイル中に GAC にアセンブリが存在することはありません。すべての出力ファイルが存在するかどうかをバッチ ファイルで確認することにより、すべてのバイナリが正常にビルドされた場合にのみ、ビルド後にバイナリをコピーするように微調整できます。

于 2010-11-26T07:56:15.467 に答える