如果程序集在本地计算机上的GAC(全局程序集缓存)中注册,那么以编程方式检查的最简单方法是什么?是否有一些易于使用的.NET API,我可以给它一个程序集DLL或Assembly对象本身的位置,以检查它是否存在于本地机器上的GAC中?在我的情况下,我正在检查的程序集已经被加载到程序检查的当前AppDomain中,因此我不确定调用Assembly.ReflectionOnlyLoad和捕获异常将像我在其他帖子中看到的那样工作,加上这似乎有点hacky .
理想情况下,我想避免调用外部可执行文件gacutil.exe来检查.
我想在使用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
Run Code Online (Sandbox Code Playgroud)
发布后事件:
"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"
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我还在回收我的Web应用程序池,以便新程序集开始工作.
我遇到的问题是这是一个非常不可靠的过程.如果我的Web应用程序失败,我的下一个版本将失败,因为卸载将失败(后期构建未在以前的版本上运行)...等等.
我想尽可能让这个过程变得可靠.我想条件卸载和组装,如果它们存在并强行安装,无论它们是否存在......但是预构建事件对于下一个原因仍然很重要:
在构建之前完全卸载所有程序集是很重要的,否则它们不会被复制到我的输出目录(因为编译器在GAC中找到它们),因此GAC安装失败,因为它无法在output\bin文件夹中找到程序集.
我应该如何在我的Web应用程序构建中可靠地执行GAC卸载和安装?
gacutil visual-studio-2010 global-assembly-cache build-events