すべてのビルドへのGACインストール - 確実に行う方法
-
28-09-2019 - |
質問
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でそれらを見つけるため)。
WebアプリケーションビルドにGACのアンインストールとインストールをどのように確実に行う必要がありますか?
解決
代わりに、Gacutilツールを使用して、GACインストール/アンインストールをプログラムできませんか?コードを使用すると、少なくともhresultsエラーコードに依存し、それに応じて対応できます。
GAC APIに関する情報はこちらをご覧ください。
http://blogs.msdn.com/b/junfeng/archive/2004/09/14/229649.aspx
他のヒント
ビルドが成功した場合は、出力アセンブリを別のディレクトリにコピーし、そこからGACにインストールします。事前建設では、このディレクトリを使用してGACからこれらのアセンブリを削除します。
このようにして、コンピレーション中にGACにアセンブリは決してありません。すべての出力ファイルが存在する場合、バッチファイルを確認することにより、すべてのバイナリが正常に構築された場合にのみ、ポストビルドを調整してバイナリをコピーできます。