1

我的解决方案中发生了一个非常奇怪的错误,我的一个项目是类库,导致引用它的项目抛出 TypeLoadException。我已经查看了关于 SO 的各种答案,最接近我的问题的是;

TypeLoadException 在 C# 中未处理 [关闭]

这个答案让我怀疑这是否是我的问题,在调试文件夹中进行了一些挖掘,我发现引用我的类库的项目正在生成同名的 DLL 和 EXE,这可能是我的问题吗?

如果是这样,我该如何解决这个问题?我的解决方案中有其他类库也在这个项目中被引用,它们不会同时生成 DLL 和 EXE 文件。

4

3 回答 3

3

我不相信,但我实际上是通过一位同事找到了原因,希望这会帮助遇到这种情况的其他人(好一个亚当)。

原因是我的项目引用我的类库具有相同的程序集名称,我一直在对我的命名空间进行一些重新调整并且没有注意到我的主项目具有相同的名称,这意味着当我的代码被构建时编译器为我的主项目创建了一个 EXE,并为我的类库创建了一个 DLL,这反过来又强制了 TypeLoadException,因为编译器已经加载了同名的 EXE。

我的代码现在可以工作了。感谢所有花时间发帖的人。

于 2012-11-05T17:07:28.197 回答
2

我的类库正在生成同名的 DLL 和 EXE

是的,这导致了这个问题。您可以通过运行 Fuslogvw.exe 并记录所有绑定来轻松查看它。这是 Fusion 的一个有点奇怪的怪癖,但是当它查找程序集时,它只查看文件名并忽略扩展名。它将接受 .dll 和 .exe 作为它正在寻找的程序集的可接受匹配。这在其他方面有点合乎逻辑,当 DLL 和 EXE 包含托管代码时,它们之间没有真正的区别。例如,完全支持引用 EXE。

没有办法强制加载程序以不同的方式执行此操作。解决方法应该很简单,只要确保生成不同的程序集名称即可。

于 2012-11-05T17:50:55.340 回答
1

在 Project -> (YourProjectName) Properties -> Application 下,确保“Output Type”设置为“Class Library”。

于 2012-11-05T16:55:31.157 回答