oɔɯ*_*ɯǝɹ 5 pinvoke mstest visual-studio-2010
我有一个VS2010 C#项目,它引用了大量本机 .dll(商业 Java 运行时)。这些文件在项目中被称为“内容”文件,因为需要与项目一起复制。
这些库中的代码使用 using 调用PInvoke,没有程序集引用。
每次我编译解决方案时,Visual Studio 测试框架都会尝试加载所有引用的 dll 文件,期望找到可能包含单元测试的 .net 程序集。由于不是 .net 程序集,因此抛出以下异常:
加载 some.dll 时出错:无法加载测试容器“e:\some.dll”或其依赖项之一。如果您将测试项目程序集构建为 64 位程序集,则无法加载它。构建测试项目程序集时,为平台选择“任何 CPU”。要在 64 位处理器上以 64 位模式运行测试,您必须更改主机选项卡中的测试设置,以在 32 位进程中运行测试。错误详细信息:无法加载文件或程序集“file:///e:\some.dll”或其依赖项之一。该模块应包含程序集清单。
这需要很多时间,我想告诉 Visual Studio 不要尝试加载这些文件。
如何告诉 Visual Studio 停止尝试加载这些文件?
saa*_*arp -1
抱歉,如果这看起来有补救作用。为了完整起见,我将其包括在内。
可以在项目文件中引用库(因此编译器会注入代码以加载引用),也可以在运行时通过 LoadLibrary() 或 PInvoke 调用动态引用库。当加载引用的库时,运行入口点的函数可以依次加载它所依赖的任何库。加载库时,Windows 将搜索一组众所周知的路径,包括%WINDIR%\Assembly当前目录。维基百科上有很多关于此的很好的概念性信息。我建议阅读它。
我无法从您的问题中判断您在构建应用程序、构建测试或执行其中任何一个时是否遇到问题。一般来说,我不希望 PInvoke 导致编译错误。
[DeploymentItem()]属性,您可以指定测试需要测试或 app/lib 项目中存在某些文件才能运行。MSDN描述了如何做到这一点。对于#1 和#2,解决方案在于调整项目中的引用。
对于#3 和#4,可能会变得更棘手。这里有一个与您有关 Windows Mobile 的类似问题,您可能会发现它很有用,特别是指使用dumpbin列出库依赖项。您还可以使用SysInternalsprocmon来监视编译或加载期间的文件访问,以查看哪些文件未找到。然后您可以包含丢失的文件,或删除引用它的库。
祝你好运。希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
7800 次 |
| 最近记录: |