gpt4 book ai didi

.net - 如何构建/部署需要同一程序集的多个版本的项目?

转载 作者:行者123 更新时间:2023-12-04 05:21:28 25 4
gpt4 key购买 nike

我正在开发一个使用conflict.dll 6.2 版的项目,但该项目还使用了使用conflict.dll 5.8 版的helper.dll。

我可以将 6.2 和 5.8 安装到 GAC 中,但我想让这个项目 xcopy 可部署。我相信 .net 会像这样在应用程序 bin 目录中搜索程序集:
\bin\conflict.dll (6.2)
\bin\5.8\conflict.dll (5.8)

但是此时,如何在项目中添加对两个版本的conflict.dll的引用,然后如何确保旧的conflict.dll部署到\bin\5.8?我是创建一个构建操作还是有其他方法?

谢谢

最佳答案

经过数小时的搜索和诅咒,我找到了一个可行且易于实现且可靠的解决方案。

问题就像所有其他答案指出的那样,必须满足以下所有条件:

  • DLL 的两个版本必须具有相同的名称,否则运行时会提示名称与 list 不匹配。
  • 运行时必须能够在搜索路径中找到这两个程序集。
  • 由于重大更改,无法进行版本重定向。
  • AppDomain.ResolveAssembly 在此示例中永远不会被调用,因为程序集已经加载过一次。

  • 解决方案是以下,在步骤:
  • 在您的解决方案目录中创建一个目录,例如 lib\
    这个层次结构:

    lib\Conflict\v1\Conflict.dll
    lib\Conflict\v2\Conflict.dll
  • 将以下内容添加到您的 app/web.config :

  • <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
    <assemblyIdentity name="Conflict" publicKeyToken="111111111111" />
    <codeBase version="1.0.0.0" href="bin\Conflict\v1\Conflict.dll" />
    <codeBase version="2.0.0.0" href="bin\Conflict\v2\Conflict.dll" />
    </dependentAssembly>
    </assemblyBinding>
    </runtime>

  • 使用 xcopy 添加构建后事件:

    xcopy $(SolutionDir)\lib $(TargetDir)/Y/S
  • 构建一次,以便复制文件。单击“项目-> 显示所有文件”。右击bin\ConflictInclude in Project (使您免于在代码中执行此操作)。如果您打包一个 Web 应用程序,这对于部署文件是必要的。

  • 完毕!

    关于.net - 如何构建/部署需要同一程序集的多个版本的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3647493/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com