添加为项目文件夹中的链接,以始终复制到输出的根目录

本文关键字:复制 根目录 输出 链接 项目 项目文件 文件夹 添加 | 更新日期: 2023-09-27 17:56:42

我正在与标准 c# 项目中的非托管.dll进行一些互操作。我不能将这些.dll添加为简单的引用,并且必须使用 P/Invoke 来实际使用它们。它们不包括清单,因此做任何聪明的反射来动态加载这些(从而解决将它们作为显式、单独的文件包含的问题)根本不可能。

我不关心安装程序版本,我可以告诉WiX(或我选择的任何安装程序平台)将哪些文件准确放置在目标系统上的位置。

问题在于调试输出,我需要这些.DLL 与我自己的项目的可执行文件并行,但我不希望它们弄乱我的实际托管代码。

所以我的情况是这样的;

  • 我将几个.dll作为链接添加到项目的文件夹中。
  • 我尝试更改 .csproj 以在调试输出的根目录下输出链接的文件。

它看起来像这样:

<None Include="..'..'externals'MyLibraries'ADll.dll">
  <Link>TidyFolder'ADll.dll</Link>
  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>

现在,通常您会将 <Link> 标记更改为您希望输出的位置,但这样做:

<None Include="..'..'externals'MyLibraries'ADll.dll">
  <Link>ADll.dll</Link>
  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>

更改链接.dll驻留在我的项目资源管理器中的文件夹;它确实正确输出,但混乱是不可取的,这也是我首先想将它们放入文件夹中的原因。

TL;DR:如何同时控制链接项在项目中的可见位置,以及它在调试时的输出位置。

添加为项目文件夹中的链接,以始终复制到输出的根目录

考虑将它们添加为嵌入式资源:

  <ItemGroup>
    <EmbeddedResource Include="..'..'externals'MyLibraries'ADll.dll">
      <Link>TidyFolder'ADll.dll</Link>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </EmbeddedResource>
  </ItemGroup>