当使用类似这样的类布局时,我注意到一些非常奇怪的行为:
// 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并按预期查看我的代码,但单元测试拒绝加载它。
我几乎肯定这个问题与我调用另一个程序集中的嵌套类的事实有关,我可能最终会重构这个设计,但我真的想知道为什么这样做不按预期工作。如果以这种方式使用类时出现问题,我希望编译器抛出异常。
感谢您的时间。
答案 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中收到此错误消息。
在项目设置中检查。