C# 奇怪的dll错误消息

C# 奇怪的dll错误消息,c#,unit-testing,dll,C#,Unit Testing,Dll,大约两周以来,我一直无法为一个项目运行任何单元测试(内置VS单元测试)。以前一切正常。错误消息是: 无法加载文件或程序集“C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateSassemblies\MyProjectName.XmlSerializers.dll”或其依赖项之一 该项目引用System.Xml.Serialization并使用XmlSerializer类;就像我编写的许多其他类/项目一样。出于某种原因,只

大约两周以来,我一直无法为一个项目运行任何单元测试(内置VS单元测试)。以前一切正常。错误消息是:

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

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

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

有人有什么想法吗

编辑:
它显然与使用XmlSerializer有关,它会自动生成该文件,而不是使用sgen.exe。这里是指向MSDN的链接。根据我所能找到的,它与将序列化器与泛型一起使用有关。我发现的任何源代码似乎都没有提供使其实际工作的任何方法。

try将所有源文件复制到某个位置,然后删除项目并尝试从头开始。可能项目依赖项发生了问题,请首先启用加载程序日志记录(使用SDK中的
FUSLOGVW.exe
)以确认找不到的内容


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

您的计算机是64位的吗?我在尝试运行64位dll w时遇到了相同的错误设置为用作x86程序集的第i个NUnit(使用corflags)

您可能会从错误消息中发现(使用FUSLOGVW.exe)


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

解决方案

事实证明,问题出在VMWare上。我安装了最新版本的VMWare,它安装了用于在VM中调试的工具。它安装或更改的某些内容导致了此问题。当我卸载VMWare时,问题消失了。因此,我重新安装了VMWare,但没有安装它的调试功能,问题没有出现ck

解决方法

我仍然不知道为什么这个问题突然开始出现,但我找到了一个解决方法

我必须转到project properties=>Build Events并将这一行添加到生成后事件命令行:

"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的建议,重做一切都不是一个选项。

我认为Nikita建议删除/删除*.sln/csproj文件,创建一个新的项目/解决方案(同一目录)并重新添加文件。可能是在过程中出错了。