返回或继承包含嵌套类的泛型

时间:2010-11-23 10:04:08

标签: c# generics nested-generics

当使用类似这样的类布局时,我注意到一些非常奇怪的行为:

// Contents of assembly A:
public class MyParentClass
{
    public class NestedClass
    {
    }
}

// Contents of assembly B:
public class AnotherClass : List<MyParentClass.NestedClass>
{
}

我可以添加程序集A作为程序集B的依赖项。这个示例将编译时没有任何错误消息,但是当涉及到,例如,加载程序集B作为单元测试的参考时,我将收到此错误是时候编译单元测试了:

  

无法加载文件或程序集'AssemblyB,Version = 1.0.0.0,Culture = neutral,        PublicKeyToken = null'或其依赖项之一。系统找不到了        指定文件。

此代码生成的程序集确实有效,我可以使用Redgate Reflector运行生成的DLL并按预期查看我的代码,但单元测试拒绝加载它。

我几乎肯定这个问题与我调用另一个程序集中的嵌套类的事实有关,我可能最终会重构这个设计,但我真的想知道为什么这样做不按预期工作。如果以这种方式使用类时出现问题,我希望编译器抛出异常。

感谢您的时间。

3 个答案:

答案 0 :(得分:0)

是否为该引用启用了“复制本地”?我假设您的测试项目测试程序集B没有程序集A的副本。在引用上将“Copy Local”设置为true应该复制程序集,以便在编译(并最终运行)测试时可以正确找到它们

答案 1 :(得分:0)

我怀疑这与嵌套类有什么关系 - 只是缺少在.NET中出现的传递依赖。

基本上,如果您要在一个项目中使用AnotherClass,则需要明确添加对AssemblyB AssemblyA的引用。这样两者都应该被适当地复制和加载。

如果这没有帮助,您可以尝试enabling fusion logging

答案 2 :(得分:0)

如果您的项目将目标框架设置为“Framework 4 Client Profile”并且链接的dll具有目标框架“Framework 4”,则会在visual studio 2010中收到此错误消息。

在项目设置中检查。