如何在C#中通过AssemblyQualifiedName在编译时静态声明类型

时间:2012-12-06 22:26:18

标签: c# assembly-resolution

  

可能重复:
  When must we use extern alias keyword in C#?

我有一个程序集,它主要由解决方案中其他项目共享的文件组成。换句话说,整个解决方案大约为10 MB,但我将该功能的一小部分导出到单独的200 KB程序集中。除了UI之外,解决方案中的所有项目都在NUnit测试项目中。

问题是,我去为其中一个共享文件添加测试,我收到以下错误:

The type 'xxx' exists in both 'c:\path\to\project\Logic.dll'
and 'c:\path\to\project\Exported.dll'.

我知道我可以使用反射并提供一个程序集限定名,或者我可以将导出的程序集测试删除到一个单独的项目中,但两者都会很痛苦。我只想在编译时指定在Logic.dll中使用xxx的版本。是否可以指定在编译时使用哪个版本的Type,因此它看起来像这样:

xxx blah = new xxx();
blah.DoSomething(123);

而不是:

Type t = Type.GetType("Logic.xxx, Logic");
object blah = Activator.CreateInstance(t);
t.GetMethod("DoSomething").Invoke(blah, new object[] { 123 });

2 个答案:

答案 0 :(得分:0)

您应该能够根据所需对象类所在的命名空间指定引用。有点像这样:

LogicNamespace.XXX blah = new LogicNamespace.XXX();

答案 1 :(得分:0)

Hans Passant的评论是正确答案:“extern别名”是我所寻找的,When must we use extern alias keyword in C#?中的答案为如何使用它提供了很好的指示。