5

我有一个VS2010 C#项目,它引用了大量的本地 .dll(商业 java 运行时)。这些文件在项目中被称为“内容”文件,因为需要与项目一起复制。

这些库中的代码使用 调用PInvoke,没有程序集引用。

每次我编译解决方案时,Visual Studio 测试框架都会尝试加载所有引用的 dll 文件,期望找到可能包含单元测试的 .net 程序集。由于没有 .net 程序集,因此引发以下异常:

加载 some.dll 时出错:无法加载测试容器“e:\some.dll”或其依赖项之一。如果您将测试项目程序集构建为 64 位程序集,则无法加载它。构建测试项目程序集时,为平台选择“任何 CPU”。要在 64 位处理器上以 64 位模式运行测试,您必须更改主机选项卡中的测试设置以在 32 位进程中运行测试。错误详细信息:无法加载文件或程序集“file:///e:\some.dll”或其依赖项之一。该模块应包含程序集清单。

这需要很多时间,我想告诉 Visual Studio 不要尝试加载这些文件。

如何告诉 Visual Studio 停止尝试加载这些文件?

4

4 回答 4

2

如果我弄错了,请纠正我:您将 P/Invoke 目标二进制文件包含在 VS 解决方案中,因为您希望在构建解决方案时将二进制文件复制到目标目录。您需要这样做,因为一旦构建了 VS 解决方案,项目就会从目标目录执行。正确的?

VS 包(默认和第 3 方)通常会尝试了解解决方案内容,并会遵循某些触发器(我们自己难以包含和控制)并以自己的方式加载解决方案和项目内容。与采用更简单的解决方法(下图)相比,在该领域进行战斗的投资回报率较低。

虽然我无法为您提供有关如何告诉 VS 的测试包不加载所有二进制文件的权威答案,但我建议将此类二进制文件作为“内容”从项目中删除,并将它们留在您的源代码管理中。添加一个构建后任务,将上述二进制文件复制到目标。这仍然会为您提供与今天相同的结果,但会使这些二进制文件无法用于测试探针。

于 2012-12-21T07:10:01.143 回答
0

我尝试重现此问题,发现根本原因是您已将测试项目设置为编译为!AnyCpu。对于托管测试代码,您有什么特别的原因吗?

因此,除非您更改此设置,否则您将继续看到此消息。

如果您想继续将此配置用于您的测试项目,您需要按照消息中的建议更新您的 .testsettings 文件。

于 2012-12-22T11:20:11.803 回答
0

您必须通过右键单击解决方案名称并单击“配置管理器”来检查配置设置。它将打开配置管理器的弹出窗口。不要检查您的项目正在使用的平台,最好选择任何 CPU。希望这可以帮助。试一试:)因为这就是你引用的例外所说的谢谢

于 2012-12-20T10:17:24.313 回答
-1
于 2012-12-19T07:56:46.363 回答