2

我已经阅读了几篇文章,这些文章让我相信可以在同一个项目中引用两个具有相同命名空间的 DLL - 请参阅http://blogs.msdn.com/b/ansonh/archive/2006/09/ 27/774692.aspx

但是,当我尝试这样做时,我遇到了一些我无法解决的问题。

这是我所做的:

  1. 为一个名为 V1.Model 的类库创建一个项目,该项目具有类 Model.MyClass。签署此程序集。
  2. 为一个名为 Model 的类库创建另一个项目,该项目也有类 Model.MyClass。签署组装。
  3. 将上述两个项目创建的 DLL 复制到一个文件夹中,比如 Versions,然后重命名它们(V1.Model -> V1.Model.dll,Model -> V2.Model.dll)。
  4. 创建一个名为 Test 的控制台应用程序项目,该项目引用 V1.Model.dll 和 V2.Model.dll。
  5. 将对 V1.Model 的引用的“别名”属性更改为“V1”。
  6. 将对 V2.Model 的引用的“别名”属性更改为“V2”。
  7. 创建以下引用这两个程序集的代码:

    外部别名 V1;
    外部别名 V2;

    static void Main(string[] args)
    {
    var v1 = new V1::Model.MyClass();
    var v2 = new V2::Model.MyClass();
    }

  8. 构建并运行测试

当我这样做时,有几个问题。

一、V1.Model.dll没有复制到bin目录下。(事实上​​,如果我包含同一个命名空间的多个版本,似乎只复制了最新版本的 DLL)。当然,我可以通过手动将 dll 复制到 bin 目录来解决这个问题,但我很好奇为什么这是必要的。另外,请注意,我已将两个引用的“复制本地”属性更改为 true。

二,当我运行应用程序时,我收到以下错误:

无法加载文件或程序集“模型,版本=1.0.0.0,文化=中性,PublicKeyToken=d89c4561a79dd027”或其依赖项之一。该系统找不到指定的文件。

任何想法我做错了什么?

谢谢,埃里克

4

1 回答 1

1

当系统试图定位一个名为“Model”的程序集时,它会寻找一个名为“Model.dll”的文件。我认为这可以通过对程序集进行 GAC 来解决。

于 2012-11-07T20:49:14.317 回答