使用 ReferenceOutputAssembly=false 添加对另一个可执行文件的引用不会复制依赖项

Adding reference to another executable with ReferenceOutputAssembly=false doesn't copy dependencies

我有一个包含多个可执行文件的解决方案(例如,MainApp.exe 和 Tool.exe)。 主要目标是确保在构建期间将工具 (Tool.exe) 及其依赖项复制到主可执行目录。

我使用了 here 的建议,它似乎适用于较旧的 Visual Studio 版本(至少适用于 16.8 之前的某些版本)。

我的项目结构(简化)如下所示:

Solution.sln
 ├ MainApp.csproj
 ├ Tool.csproj
 |  └ App.config
 └ ToolLib.csproj

工具项目包含 App.config 文件,并引用 ToolLib 项目。

我的 MainApp.csproj 看起来像这样:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <OutputType>Exe</OutputType>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="../Tool/Tool.csproj">
      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
      <OutputItemType>Content</OutputItemType>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <Targets>Build;DebugSymbolsProjectOutputGroup</Targets>
    </ProjectReference>
  </ItemGroup>
  
</Project>

编译后升级到16.8后确实将文件Tool.exe复制到输出目录,但其依赖项ToolLib.dll和Tool.config都没有再复制到输出目录.

这是错误还是预期的行为?确保将具有所有所需依赖项的整个工具复制到 MainApp 的输出目录的正确方法是什么?


添加了重现问题的测试项目:https://github.com/vladd/ReferenceOutputAssembly

你给的太老了,不适合VS2019。您所有的项目都以 net core 3.1 为目标。我已经在 VS2019 16.8、VS2019 16.7 甚至 16.6 中测试了您的项目,它们的行为都与您描述的相同。只包含 Tool.dllTool.exe.

所以我想知道为什么你之前说 ToolLib 的构建结果将打印在主项目中。

实际上,<ReferenceOutputAssembly>false</ReferenceOutputAssembly>会阻止引用项目及其依赖项目的最主要输出文件被复制到主项目中。

建议

您必须将其设置为 true:

<ReferenceOutputAssembly>true</ReferenceOutputAssembly>

如果您不想将 ToolLib.pdbTool.pdb 文件复制到主项目中,您可以在 MainApp.csproj 文件中添加这些节点:

  <PropertyGroup>  
       <AllowedReferenceRelatedFileExtensions>*.pdb;.dll.config</AllowedReferenceRelatedFileExtensions>        
  </PropertyGroup>

如果你也想复制pdb文件,你应该在AllowedReferenceRelatedFileExtensions下添加.pdb

<AllowedReferenceRelatedFileExtensions>.pdb;.dll.config</AllowedReferenceRelatedFileExtensions>  

更新 1

I tried your suggestion but with it the files Tools.deps,json and Tool.runtimeconfig.json are not copied, so running the tool fails.

MainApp.csproj 文件中添加:

<PropertyGroup>
    <AllowedReferenceRelatedFileExtensions>.pdb;.dll.config;.runtimeconfig.dev.json;.runtimeconfig.json</AllowedReferenceRelatedFileExtensions>
</PropertyGroup>