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 回答