奇怪的DLL错误消息

时间:2009-03-17 16:55:24

标签: c# unit-testing dll

现在大约2周,我无法为项目运行任何UnitTests(内置VS单元测试)。以前一切都很好。错误消息是:

无法加载文件或程序集“C:\ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ PrivateAssemblies \ MyProjectName.XmlSerializers.dll”或其中一个依赖项。

项目引用System.Xml.Serialization并使用XmlSerializer类;就像我写的许多其他课程/项目一样。出于某种原因,只有这个项目受到影响。它构建良好,运行良好,我只是无法运行我的单元测试。

我检查了目录,该目录中的所有dll都是Microsoft dll。它正在寻找的DLL显然不是微软的DLL。

有人有什么想法吗?

修改 它显然与使用XmlSerializer有关,它自动生成该文件而不是使用sgen.exe。以下是MSDN article的链接。从我能够找到的,它与使用带有泛型的序列化器有关。我发现的所有消息来源似乎都没有提供任何方法来使它真正起作用。

4 个答案:

答案 0 :(得分:3)

首先启用加载程序日志记录(使用SDK中的FUSLOGVW.exe)以确认未找到的内容。

然后在所有程序集上使用Reflector找到试图加载不存在的程序集的程序集。如果您没有找到这样的程序集,则必须动态加载它,在这种情况下,附加到AppDomain.AssemblyResolve应该允许您识别位置。

答案 1 :(得分:0)

尝试将所有源文件复制到某处,然后删除项目并尝试从头开始创建。项目依赖项可能发生了一些事情

答案 2 :(得分:0)

你的电脑是64位吗?尝试使用NUnit运行64位dll时遇到了同样的错误,NUnit被设置为x86程序集(使用corflags)。

您可以从错误消息中找到(使用FIXLOGVW.exe舔Richard建议)。

如果是这种情况,您可以使用corflags发送dll或NUnit作为正确的程序集运行。

答案 3 :(得分:0)

<强>解决方案

事实证明,问题出在VMWare上。我安装了最新版本的VMWare,并安装了它在VM中进行调试的工具。它安装或更改的东西导致了这个问题。当我卸载VMWare时,问题就消失了。所以,我重新安装了VMWare而没有安装它的调试功能,问题没有回来。

解决方法

我仍然不知道为什么这个问题突然开始发生,但我找到了一个让它工作的黑客。

我不得不去项目属性=&gt;构建事件并将此行添加到Post-build事件命令行:

"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\sgen.exe" "$(TargetPath)" /force

这会强制VS生成文件。然后我不得不手动将该文件复制到它正在寻找的目录中:

"C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies"

现在我可以运行我的测试并逐步完成它们。我现在遇到的问题是1)每次我在序列化的类中更改某些内容时,我必须记住将dll复制到该目录,以及2)当测试完成运行时,我现在得到一个ThreadInterruptedException;因此3)我一次只能进行一次测试。

不是一个好的解决方案,但至少我可以跛行。不幸的是,正如Nikita Borodulin建议的那样,重做一切都不是一种选择。