参考2 dll在vb.net 3.5项目中使用相同的命名空间?

时间:2011-06-29 13:24:16

标签: .net vb.net .net-3.5 namespaces dll

我有一个vb.net 3.5类库项目,需要引用两个具有相同名称空间的程序集。我们有两个第三方dll,其中一个是版本5.1,另一个是版本6.1。它们具有相同的dll文件名,并且它们使用相同的命名空间和函数/类名。项目需要根据具体情况使用其中一种。

我已经研究了一个使用“extern别名”功能的c#进程来引入不同的程序集。

http://blogs.msdn.com/b/ansonh/archive/2006/09/27/774692.aspx

What use is the Aliases property of assembly references in Visual Studio 8

似乎此功能并非完全适用于vb.net。

我尝试过的事情

我已重命名第二个dll并添加了对我项目的两个引用。在这一点上,我得到了大量的: 'blah' is ambiguous in the namespace

所以我需要为不同的版本添加别名。在vb.net中,您可以在import语句中执行别名,如:

Imports version5 = Somedll.Something

问题是我无法为不同版本的dll设置程序集引用别名。显然在vb.net中,您无法在引用属性窗口中设置它们。所以我尝试在我的项目文件中设置它们:

<Reference Include="somedll.5.Navigation">
  <HintPath>..\..\Utility\ThirdPartyDLLS\somedll.5.dll</HintPath>
      <Aliases>SomeDLL5</Aliases>
      <Private>False</Private>
</Reference>
<Reference Include="somedll.6.Navigation, Version=6.1.0.0, Culture=neutral, PublicKeyToken=6d02be8724ca751c, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\Utility\ThirdPartyDLLS\somedll.6.dll</HintPath>
      <Aliases>SomeDLL6</Aliases>
      <Private>False</Private>
</Reference>

我希望这可以工作:

Imports version5 = SomeDLL5.Something
Imports version6 = SomeDLL6.Something

但是“SomeDLL5 / 6”并没有出现在intellisense中。那么如何在同一个项目中引用两个dll呢?

3 个答案:

答案 0 :(得分:7)

我是VB规范的领导者。我担心没有VB的方式这样做(没有反思,正如DaMartyr所说)。我知道这是拖累。我将把它列入我们下一届VB语言设计会议的议程。

答案 1 :(得分:0)

如果可以获得性能影响,请尝试System.Reflection Namespace

答案 2 :(得分:0)

这有帮助吗? “在极少数情况下,您引用具有相同类型名称和相同名称空间的2个程序集(例如同一个dll的2个不同版本) - 您可以使用别名区分给定类型使用哪个程序集。默认别名对于所有引用都是全局的,但您可以在引用它时为任何程序集指定自己的别名(使用编译器开关 - 或者只使用Visual Studio中的属性框) - 并在代码文件的顶部有一个extern别名子句在哪里使用它 - 您可以使用:: MyNamespace.Type“

访问不同程序集中的类型

来源:two different DLL with same namespace