gpt4 book ai didi

c# - Interop、 native DLL 和 Visual Studio 构建过程

转载 作者:太空狗 更新时间:2023-10-29 19:41:31 25 4
gpt4 key购买 nike

令人困惑的标题,令人困惑的问题,但我希望能引起您的注意。重点:

我有一个包含三个项目的 VS 解决方案。

  1. Project1: native DLL 互操作包装器,它导入 Native.dll
  2. Project2:调用 Project1 包含的包装器的 WinForms 项目。
  3. Project3:一个 MSTest 项目,它调用 Project1 Project2 包含的包装器。

我已将 Native.dll 包含在 Project1 中,并将其配置为复制到输出文件夹。

此设置将导致 DllImport 失败,提示找不到目标 dll。原因很简单。我正在运行项目 2 或 3,并且在每种情况下:

  • Project2:构建时,它会复制构建过程生成的 Project1.dll,但不会复制 Native.dll。运行代码时,该文件夹为 $ProjectDir\bin\Debug(或发布)并且 Native.dll 不可用。

  • 项目 3:这是一个 MSTest 项目;当要求运行所有测试时,它会编译应用程序并将输出 exe 和 dll 复制到输出文件夹。但是它不会复制 Native.dll。

在这两个例子中,DLL都被复制到Project1的调试文件夹中,这是没有用的。

是否有更正此项目的简单方法?简单的意思是我想避免使用 Post Build 进行复制或其他手动过程。我还想尝试避免使用绝对路径来复制 .dll。

我使用的是 Visual Studio 2010。

谢谢!

更新:上面的场景说明 Project3 引用了 Project1,但事实并非如此。 Project3 引用 Project2,后者引用 Project1。在这种情况下,Native.dll 将复制到 Project2 输出文件夹,但不会复制到 Project3 输出文件夹。我还添加了一个类库类型的 Project4,添加了对 Project2 的引用,它也不复制。

换句话说,如果项目 P[A] 有一个带有“复制到输出”规则的项目 X,并且 P[B] 引用它,P[B] 也会复制 X。但是,如果 P [C] 引用 P[B],它无视复制规则。

最佳答案

在您的项目中添加对“Native.dll”的引用。在文件的属性窗口中,将“Build Action”设置为“None”,将“Copy to Output Directory”设置为“Always”,或“Copy if Newer”

关于c# - Interop、 native DLL 和 Visual Studio 构建过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9899030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com