【发布时间】:2012-03-28 21:43:37
【问题描述】:
令人困惑的标题,令人困惑的问题,但我希望我能引起您的注意。言归正传:
我有一个包含三个项目的 VS 解决方案。
- Project1:本机 DLL 互操作包装器,它导入 Native.dll。
- Project2:调用 Project1 包含的包装器的 WinForms 项目。
-
Project3:一个 MSTest 项目,它调用
Project1Project2 包含的包装器。
我已经在 Project1 中包含 Native.dll,并将其配置为复制到输出文件夹。
此设置将导致 DllImport 失败,表示找不到目标 dll。原因很简单。我正在运行项目 2 或 3,并且在每种情况下:
Project2:在构建时,它会复制由构建过程生成的 Project1.dll,但不会复制 Native.dll。运行代码时,文件夹为 $ProjectDir\bin\Debug(或发布),并且 Native.dll 不可用。
Project3:这是一个 MSTest 项目;当要求运行所有测试时,它会编译应用程序并将输出的 exe 和 dll 复制到输出文件夹。但是它不会复制 Native.dll。
在这两个例子中,DLL都被复制到了Project1的debug文件夹中,没有用。
有没有一种简单的方法来纠正这个项目?简单的意思是我想避免使用 Post Build 来复制或其他手动过程。我还想尝试避免使用绝对路径来复制 .dll。
我正在使用 Visual Studio 2010。
谢谢!
更新: 上述情况表明 Project3 引用了 Project1,但事实并非如此。 Project3 引用 Project2,Project2 引用 Project1。在这种情况下,Native.dll 被复制到 Project2 输出文件夹,而不是 Project3 输出文件夹。我还添加了一个类库类型的 Project4,添加了对 Project2 的引用,它也不会复制。
换句话说,如果一个项目 P[A] 有一个带有“复制到输出”规则的项目 X,并且一个 P[B] 引用它,那么 P[B] 也会复制 X。但是,如果一个 P [C] 引用 P[B],它忽略了复制规则。
【问题讨论】:
-
但是后期构建操作似乎非常适合这种情况,而且它只是一个复制命令,还不够简单吗?
-
@SofianHnaide,我认为 Post Build 行不通,因为我需要将绝对路径传递给它,而在 Test 项目的情况下,我无法确定输出路径。有没有办法做到这一点?
标签: c# visual-studio