質問

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にアセンブリは決してありません。すべての出力ファイルが存在する場合、バッチファイルを確認することにより、すべてのバイナリが正常に構築された場合にのみ、ポストビルドを調整してバイナリをコピーできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top