2010-08-20 31 views
3

我正在使用Visual Studio 2008在Windows 7上工作。VisualStudio单元测试找不到P/Invoke的DLL。我怎样才能解决这个问题?

我有一个使用P/Invoke调用本地DLL的.NET程序集。我在Visual Studio解决方案中设置了一个单独的.NET单元测试项目,通过向其中调用各种调用来测试程序集。但是,当单元测试调用程序集并且程序集使用P/Invoke进行调用时,它无法找到本机DLL。

当我编写独立的.NET控制台应用程序时,没有任何问题。程序集可以使用P/Invoke并成功找到DLL。

在使用程序集之前,我可以使用DLL的绝对路径调用LoadLibrary来进行单元测试。但是,这种方法很丑陋,需要一条绝对路径 - 这对其他用户来说会有问题。

总之,我的问题是 - 如何指定或修改Visual Studio单元测试执行时正在使用的DLL搜索路径?

任何帮助将不胜感激。

问候, 丹

回答

3

这听起来像问题是,你的本机DLL不被部署单元测试的DLL。这不是一个不常见的问题,因为托管的DLL没有引用元数据中的本机元素,因此部署包不知道要部署它们。

最合适的解决方案是修复部署,而不是更改DLL搜索路径。但这是一个单元测试的具体问题。你能告诉我们你正在使用什么框架,以便我们能帮助你吗?

3

如果您使用的是Visual Studio 2008的集成测试框架,你应该看看DeploymentItemAttribute Class

基本上你只装饰你的测试方法与此属性,它会自动复制的部署项目到测试之前的输出目录执行。你甚至可以使用这个复制整个依赖关系树。它支持可变扩展和相对路径。

另请参阅How to: Configure Test Deployment以获取有关VS2008测试部署的更一般信息。

相关问题