避免使用 VisualStudio / MSBuild 复制内容文件以输出

Avoid copying content files to output with VisualStudio / MSBuild

我正在开发一个 C# .NET 5.0 SDK 样式的项目,该项目使用在运行时动态加载的插件。有一个主项目,每个插件都有一个项目。插件构建过程的输出包括一些内容文件(json 配置文件和徽标图像)。主项目和插件都在同一个解决方案中。

内容文件在插件项目中表示如下:

<ItemGroup>
    <Content Include="logo.jpg">
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Include="plugin.json">
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
</ItemGroup>

我想这样做,以便在构建主项目的同时构建插件(如有必要),但不在主项目输出中包含任何插件构建输出。为此,我将对插件项目的引用添加到主项目中,如下所示:

<ItemGroup>
    <ProjectReference Include="..\Plugin1\Plugin1.csproj">
        <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
    </ProjectReference>
    <ProjectReference Include="..\Plugin2\Plugin2.csproj">
         <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
    </ProjectReference>
    <!-- etc. -->
</ItemGroup>

这对于插件 DLL(它们不包含在主项目输出中)按预期工作,但它不适用于插件内容文件(它们 被包含在主项目输出中)。

我尝试将 <CopyToOutputDirectory>Never</CopyToOutputDirectory><OutputItemType>None</OutputItemType> 添加到项目引用中,但都没有任何效果。

知道如何防止内容文件包含在主项目输出中吗?

您应该可以使用以下方法完成此操作:

<ItemGroup>
  <ProjectReference Include="..\Plugin1\Plugin1.csproj"
    ReferenceOutputAssembly="False"
    Private="False" />
</ItemGroup>