【发布时间】:2010-11-02 03:23:52
【问题描述】:
我们有一个 Web 应用程序部署到许多网站,只需要更改前端,共享的后端部分在 GAC 中有它的 DLL,因此我们只需更新一个 dll,所有网站都会获得更新。
有没有办法用 /bin 文件夹中的 DLL 覆盖 GAC,以便在新功能发布之前对其进行测试?
【问题讨论】:
标签: asp.net deployment gac bin
我们有一个 Web 应用程序部署到许多网站,只需要更改前端,共享的后端部分在 GAC 中有它的 DLL,因此我们只需更新一个 dll,所有网站都会获得更新。
有没有办法用 /bin 文件夹中的 DLL 覆盖 GAC,以便在新功能发布之前对其进行测试?
【问题讨论】:
标签: asp.net deployment gac bin
如果它与引用的 DLL 具有相同的版本号,则使用 GAC。
如果您增加版本号,请参考新版本号重建网站,将新版本放在 /bin 目录中,然后将使用该 DLL。
如果您不想更改版本号,那就太不走运了。
当 .NET 加载强命名程序集时,首先它会尝试确定要使用的版本号。它首先通过引用执行此操作,然后查找publisher policies,然后在配置文件中查找binding redirects。
完成此操作后,它会在 GAC 中查找程序集,然后在任何 codebase specified 中查找,然后它会为 DLL 探测各种文件系统文件夹。如果在其中任何一个步骤中找到正确的版本程序集,它就会停止。
如果您不更改强命名程序集的版本号,.NET 将在 GAC 中找到原始程序集并停止查找。请注意,因为它会在找到一个时停止,并且因为首先在 GAC 中查找,所以为您的程序集指定一个代码库将没有用,除非您还指定一个新的版本号。
【讨论】:
我已经能够使用<codebase>Element 使用\bin 文件夹中的程序集覆盖GAC。
通过在我的 web.config 文件中指定 <codebase version="1.2.3.4" href="/bin/MyAssembly.dll" />,我可以告诉我的应用程序使用此版本,而不是 GAC 中指定的版本。
您可能还想查看<probing>Element 以指定装配位置?
【讨论】:
我想我可能会说与 Adam Sills 相同的想法,但为了我的理解重新措辞。通过我自己的测试,看起来是这样的:
我希望这是正确的......
【讨论】:
您可以使用 Windows 软件开发工具包 (SDK) 中包含的程序集绑定日志查看器 (Fuslogvw.exe) 查看日志文件中的绑定信息。
s
【讨论】: