避免使用 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>
我正在开发一个 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>