我读了几篇文章,这些文章让我相信可以在同一个项目中引用两个具有相同命名空间的 DLL - 请参阅 http://blogs.msdn.com/b/ansonh/archive/2006/09/27/774692.aspx。
但是,当我尝试这样做时,遇到了几个我无法解决的问题。
这是我所做的:
- 为类库创建一个名为 V1.Model 的项目,其中包含类 Model.MyClass。签署此程序集。
- 为类库创建另一个名为 Model 的项目,它也有类 Model.MyClass。签署大会。
- 将上述两个项目创建的 DLL 复制到一个文件夹中,例如 Versions,并重命名它们(V1.Model -> V1.Model.dll,Model -> V2.Model.dll)。
- 创建一个名为 Test 的控制台应用程序项目,它引用 V1.Model.dll 和 V2.Model.dll。
- 将对 V1.Model 的引用的“别名”属性更改为“V1”。
- 将对 V2.Model 的引用的“别名”属性更改为“V2”。
创建以下引用两个程序集的代码:
外部别名 V1;
外部别名 V2;static void Main(string[] args)
{
var v1 = new V1::Model.MyClass();
var v2 = new V2::Model.MyClass();
}构建并运行测试
当我这样做时,有几个问题。
一、V1.Model.dll没有复制到bin目录下。 (实际上,如果我包含同一个命名空间的多个版本,似乎只会复制最新版本的 DLL)。当然,我可以通过手动将 dll 复制到 bin 目录来解决这个问题,但我很好奇为什么这是必要的。另请注意,我已将两个引用的“复制本地”属性更改为 true。
二,当我运行应用程序时,出现以下错误:
Could not load file or assembly 'Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d89c4561a79dd027' or one of its dependencies. The system cannot find the file specified.
知道我做错了什么吗?
谢谢, 埃里克
最佳答案
当系统尝试定位名为“Model”的程序集时,它会查找名为“Model.dll”的文件。我认为这可以通过 GAC-ing 程序集来解决。
关于c# - 尝试使用 "extern alias"引用具有相同命名空间的两个不同 DLL 时出错 (Visual Studio 2010),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13276781/