C# 是否可以将同一程序集的不同版本引用到单个项目中?
在我的解决方案中,我有几个使用Log4Net(1.2和2.5)的项目 然后我有一个项目,在那里我做(其他项目的)所有单元测试。因此,根据我测试/模拟的内容,我需要log4net1.2或2.5 我了解到您可以在应用程序中支持单个程序集的不同版本(使用代码库等),但在项目中支持单个程序集的不同版本吗?如果是,怎么做 编辑: 下面是一个小项目(2个类,2个方法,2个构造函数),显示了我的问题:C# 是否可以将同一程序集的不同版本引用到单个项目中?,c#,.net,assemblies,C#,.net,Assemblies,在我的解决方案中,我有几个使用Log4Net(1.2和2.5)的项目 然后我有一个项目,在那里我做(其他项目的)所有单元测试。因此,根据我测试/模拟的内容,我需要log4net1.2或2.5 我了解到您可以在应用程序中支持单个程序集的不同版本(使用代码库等),但在项目中支持单个程序集的不同版本吗?如果是,怎么做 编辑: 下面是一个小项目(2个类,2个方法,2个构造函数),显示了我的问题: (我希望链接能够工作)您可以使用别名引用同一dll的不同版本,如下所述: 在客户端应用程序解决方案中添加对
(我希望链接能够工作)您可以使用
别名
引用同一dll的不同版本,如下所述:
在客户端应用程序解决方案中添加对两个DLL的引用。然后在参考节点下的解决方案资源管理器中选择第一个(旧版本)类库。在属性窗口中,将“别名”字段从“全局”更改为“旧版本”。在选择较新的类库后也进行类似的更改。那你就可以走了
多亏了皮科的建议,我才得以成功。但由于它需要的不仅仅是使用alias和重命名dll,我将写下整个过程
extern alias log4net_1_2_10_0;
using log4net_1_2_10_0.log4net;
using System.Web;
...
当您读到可以在应用程序中支持单个程序集的不同版本(使用代码库等)时,您读到了什么?我对此表示怀疑,因为他们会两次定义相同的名称空间。@AUsr19532-您认为这有什么问题?多个程序集的类型存在于同一命名空间中是完全正常的。编译器如何知道是从一个版本还是从另一个版本使用Samplenamespace.lib.somthing?@AUsr19532-正如Pikoh的回答所示,如果它们的类型完全相同,那么可以使用别名,但我的观点是,程序集在同一名称空间中具有(不同)类型是非常常见的。例如,请参阅(来自系统程序集)和(来自mscorlib程序集),VS甚至不允许我添加引用“提及。。。无法添加。对组件的引用。。。项目中已存在。嗯..尝试重命名dll的名称,例如
log4netold.dll
和log4netnew.dll
这样更好,我可以添加两个引用。因此,我使用了一个别名,但是在单元测试运行时找不到全局别名上的别名(它编译了,但是测试涉及“global log4net”crashe)。我认为必须为这两个别名添加别名。请看我回答中的链接,它不起作用。这可能与XUnit有关吗?再竖琴?因为我使用它们来定义/运行我的测试。我遵循这个答案,但文件上的外部别名给出了错误“预期标识符”