【发布时间】:2010-11-01 08:42:20
【问题描述】:
当我使用 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 卸载和安装?
【问题讨论】:
-
“妈妈,关于和被告谈话,我跟你说了些什么?” "To not to."
-
您到底为什么要在您的开发机器和每次构建中执行此操作?我可以看到您的安装可能会在 GAC 中添加一些内容,但是关心开发框的唯一原因是这些内容是否用于 COM 互操作。谈论回收网络应用程序池表明这种可能性较小。
-
因为我正在构建一个由 sharepoint 运行的 Web 应用程序,并且我将我的程序集放在 GAC 中,因此 Sharepoint Web 应用程序池能够访问/运行它们。因此,当我进行更改时,我会重新安装它们并回收 sharepoint 应用程序池以使更改生效。
-
卸载时为什么要指定 /f 选项?
-
@Mike Dour:强制卸载以防正在使用。检查 gacutil 文档
标签: visual-studio-2010 gacutil global-assembly-cache build-events