如何将 .deps 和 .runtimeconfig 文件包含为项目依赖项?

How do I include .deps and .runtimeconfig files as project dependencies?

Visual Studio 为我的项目创建 运行 exe 所需的两个文件和 .exe:一个 deps.json 和一个 runtimeconfig.json。我的解决方案中的第二个项目将第一个项目作为项目参考,但是这两个文件没有被复制到我的第二个项目的输出目录中。我怎么能告诉 Visual Studio 它应该将这些文件复制到第二个项目的输出目录中,因为引用的项目依赖于它们?

我的第一个项目的输出目录:

Foo.exe
Foo.deps.json
Foo.runtimeconfig.json

我的第二个项目的输出目录:

Bar.exe
Foo.exe
Should contain deps and runtimeconfig files, but does not

我找到的解决方案是手动编辑我的 .csproj 文件以添加以下目标:

  <Target Name="AddRuntimeDependenciesToContent"
          Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp'"
          BeforeTargets="GetCopyToOutputDirectoryItems"
          DependsOnTargets="GenerateBuildDependencyFile;
                            GenerateBuildRuntimeConfigurationFiles">
    <ItemGroup>
      <ContentWithTargetPath Include="$(ProjectDepsFilePath)"
                             Condition="'$(GenerateDependencyFile)' == 'true'"
                             CopyToOutputDirectory="PreserveNewest"
                             TargetPath="$(ProjectDepsFileName)" />
      <ContentWithTargetPath Include="$(ProjectRuntimeConfigFilePath)"
                             Condition="'$(GenerateRuntimeConfigurationFiles)' == 'true'"
                             CopyToOutputDirectory="PreserveNewest"
                             TargetPath="$(ProjectRuntimeConfigFileName)" />
    </ItemGroup>
  </Target>

此解决方案来自 https://github.com/dotnet/sdk/issues/1675#issuecomment-658779827

该线程中还发布了其他一些类似的解决方案,但这是唯一对我有用的解决方案。其他人要么不一致地将文件复制到我的第二个项目,要么导致第一个项目由于试图访问尚不存在的文件而无法构建。与此的主要区别在于包含正确的“BeforeTargets”属性(可能还有“DependsOnTargets”),控制在构建过程中的哪个点包含文件。