我们有一个部署到许多网站的Web应用程序只有前端更改,共享后端部分在GAC中有它的DLL,所以我们只需要更新那个dll并且所有站点都获得更新。
有没有办法在/ bin文件夹中使用DLL覆盖GAC以在新功能发布之前测试它们?
答案 0 :(得分:79)
如果它与引用的DLL具有相同的版本号,则使用GAC。
如果您增加版本号,请重新引用引用新版本号的网站,将新版本放在/ bin目录中,然后将使用该DLL。
如果您不想更改版本号,那么您将非常幸运。
当.NET加载强命名程序集时,首先它会尝试确定要使用的版本号。它首先通过引用执行此操作,然后查找publisher policies,然后在配置文件中查找binding redirects。
执行此操作后,它会在GAC中查找程序集,然后在任何codebase specified中查找,然后它会探测DLL的各种文件系统文件夹。如果在任何一个步骤中找到了正确的版本程序集,它就会停止。
如果您不更改强名称程序集的版本号,.NET将在GAC中找到原始版本号并停止查找。请注意,因为它在找到一个时停止,并且因为在GAC中查找是第一个,所以为程序集指定代码库将没有任何好处,除非您还指定了新的版本号。
答案 1 :(得分:11)
我已经能够使用<codebase>
元素在\ bin文件夹中使用程序集覆盖GAC。
通过在我的web.config文件中指定<codebase version="1.2.3.4" href="/bin/MyAssembly.dll" />
,我可以告诉我的应用程序使用此版本而不是GAC中指定的版本。
您可能还想查看<probing>
元素以指定装配位置?
答案 2 :(得分:2)
我想我可能会像亚当·西尔斯那样说出来,但为了我的理解而重新措辞。通过我自己的测试,看起来就是这样:
我希望这是正确的......
答案 3 :(得分:0)
您可以使用Windows软件开发工具包(SDK)中包含的程序集绑定日志查看器(Fuslogvw.exe)在日志文件中查看绑定信息。
取值