是否可以将同一装配的不同版本引用到单个项目中?

Ser*_*ern 6 .net c# assemblies

在我的解决方案中,我有几个使用Log4Net(1.2和2.5)的项目.

然后我有一个项目,我在那里进行所有单元测试(其他项目).所以我的情况取决于我测试/模拟我需要Log4Net 1.2或2.5.

我读过您可以在应用程序中支持不同版本的单个程序集(使用代码库等),但是甚至可以将单个程序集的不同版本支持到项目中吗?如果是这样,怎么样?

编辑:

这是一个很小的(2个类,2个方法,2个构造函数)项目,显示了我的问题:

https://srv-file1.gofile.io/download/EQFdOs/212.76.254.142/Log4NetMulti.zip

(我希望链接工作)

Ser*_*ern 12

感谢Pikoh的建议,我设法让它发挥作用.但是因为它需要的不仅仅是使用别名并重命名dll,我会写下整个过程.

  1. 删除现有的参考(例如:log4net.dll)从项目
  2. 在项目中添加一个文件夹来存储几个dll(例如:/ Libs)
  3. 在其中添加几个dll并为它们提供唯一的文件名(如log4net.1.2.10.0.dll,log4net.1.2.15.0.dll)
  4. 转到这些文件的属性并选择" 复制:始终 "或" 复制:复制如果更新 "
  5. 添加对这些文件的引用
  6. 为这些引用提供唯一别名(例如:log4net_1_2_10_0,log4net_1_2_15_0)
  7. 在您的代码中,使用" extern alias "关键字来使用别名.

    extern alias log4net_1_2_10_0;
    
    using log4net_1_2_10_0.log4net;
    using System.Web;
    ...
    
    Run Code Online (Sandbox Code Playgroud)
  8. 将代码库添加到配置文件中.这些应该引用您放入文件夹的dll,以及正确的版本和令牌.

    <runtime> 
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
          <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" />
          <codeBase version="1.2.15.0" href="Libs/log4net.1.2.15.0.dll"/>
        </dependentAssembly>
        <dependentAssembly>
          <assemblyIdentity name="log4net" publicKeyToken="1b44e1d426115821" />
          <codeBase version="1.2.10.0" href="Libs/log4net.1.2.10.0.dll"/>
        </dependentAssembly>
      </assemblyBinding>
    </runtime>  
    
    Run Code Online (Sandbox Code Playgroud)


Pik*_*koh 5

您可以使用 引用同一 dll 的不同版本Alias,如MSDN此处所述:

在客户端应用程序解决方案中添加对这两个 dll 的引用。然后在参考节点下的解决方案资源管理器中选择第一个(旧版本)类库。在属性窗口中,将 Aliases 字段从 global 更改为 oldVer。在选择较新的类库后也进行类似的更改。然后你就可以走了……