在我的解决方案中,我有几个使用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
(我希望链接工作)
答案 0 :(得分:12)
感谢Pikoh的建议,我设法让它发挥作用。但是因为它需要的不仅仅是使用别名并重命名dll,所以我会记下整个过程。
在您的代码中,使用“ extern别名”关键字来使用别名。
extern alias log4net_1_2_10_0;
using log4net_1_2_10_0.log4net;
using System.Web;
...
将代码库添加到配置文件中。这些应该引用您放入文件夹的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>
答案 1 :(得分:4)
您可以使用Alias
引用同一dll的不同版本,如此处MSDN所述:
在客户端应用程序解决方案中添加对这两个dll的引用。然后在引用节点下的Solution Explorer中选择第一个(旧版本)类库。在属性窗口中,将Aliases字段从global更改为oldVer。选择较新的类库后也要进行类似的更改。你很高兴去......