2

在使用如下所示的类布局时,我注意到一些非常奇怪的行为:

// 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 并按预期查看我的代码,但单元测试拒绝加载它。

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

感谢您的时间。

4

3 回答 3

0

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

于 2010-11-23T10:10:56.060 回答
0

我怀疑这与嵌套类有什么关系——只是在 .NET 中缺乏传递依赖。

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

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

于 2010-11-23T10:26:13.647 回答
0

如果您的项目将目标框架设置为“框架 4 客户端配置文件”并且链接的 dll 具有目标框架“框架 4”,您会在 Visual Studio 2010 中收到此错误消息。

在您的项目设置中检查。

于 2010-11-23T10:34:26.923 回答