2010-11-23 32 views
2

我使用的是类的布局,看起来像这样的时候注意到了一些非常奇怪的现象:返回或继承了通用包含嵌套类

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

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

我可以添加组件A作为装配B.本的依赖例如将编译没有任何错误消息,但是当涉及到,例如,加载组件乙作为用于单元测试的参考,我将当谈到时间编译单元测试接收此错误:

无法加载文件或程序集'AssemblyB,Version = 1.0.0.0,Culture = neutral, PublicKeyToken = null'或它的一个依赖关系。系统找不到指定的 文件。

该代码生成的程序集确实可以正常工作,并且我可以运行Redgate Reflector生成的DLL并按预期查看我的代码,但单元测试拒绝加载它。

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

谢谢你的时间。

+0

你在同一时间为B装载组件A,在你的单元测试组装? – 2010-11-23 10:10:41

回答

0

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

+0

实际上,组件B也加载了单元测试项目。在所有情况下,“复制本地”设置为True,所以我不认为这是问题。好主意,但。 – 2010-11-23 10:15:14

0

我怀疑,这是什么做的嵌套类 - 只是缺乏传递依赖的正浮出水面.NET。

基本上,如果你打算在一个项目中使用AnotherClass,你需要一个参考明确添加到这两个AssemblyBAssemblyA。这两种方式都应该被复制并适当加载。

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

+0

我在单元测试项目中添加了对两个程序集的引用,所以这不是问题。绑定日志窗口中也没有任何东西出现,但我从来没有遇到过这个工具,所以这仍然是我学到的新东西。感谢那! – 2010-11-23 10:51:38

+1

我上次检查(几年前)Fuslogvw.exe有点不灵活。所以我宁愿将我的融合日志整理到一些文件夹中。更改“HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion”,将ForceLog和LogFailures设置为1并设置LogPath = C:\ Temp \ FusionLog并创建该文件夹。 – 2010-11-23 14:03:02

0

您在Visual Studio 2010中收到此错误信息,如果你的项目目标框架设置为“Framework 4的客户端配置文件”和链接DLL有一个目标框架“框架4”。

检查,在您的项目设置。