繁体   English   中英

使用 `dotnet build` 或 `dotnet publish` 时如何为引用的项目指定构建配置?

[英]How to specify build configuration for referenced projects when using `dotnet build` or `dotnet publish`?

我有一个 .NET Core 3 项目,它引用了其他几个项目。 我的主根项目有一个Release-X构建配置,但其他项目只有一个Release配置,没有匹配Release-X配置。

当我尝试使用此发布我的主根项目时...

dotnet publish MyProject.csproj -c Release-X

...它似乎为所有引用的项目使用了一些神秘的不存在的默认构建配置。 (我可以知道,因为引用的项目在其所有构建配置中都允许不安全代码,但使用上述命令构建会导致不安全代码错误。)

我希望能够使用其Release-X构建配置构建我的主根项目,但使用它们的Release配置构建所有引用的项目。 我该怎么做呢?

配置值被设置为全局属性,在整个项目图上强制执行,直到项目到项目的引用显式更改它。

有三种方法可以解决这个问题,但请注意,由于 NuGet 恢复逻辑的差异,从 Visual Studio 内部构建或从命令行构建 .sln 文件时,这可能会导致结果不一致(但如果您没有Condition应该没问题package 上的属性或 csproj 中依赖于$(Configuration)的项目引用)

  1. 为引用的项目设置显式配置(我建议使用它):

     <Project Sdk="Microsoft.NET.Sdk">.... <PropertyGroup> <ReferencedConfiguration>$(Configuration)</ReferencedConfiguration> <ReferencedConfiguration Condition="'$(Configuration)' == 'Release-X'">Release</ReferencedConfiguration> </PropertyGroup> <ItemGroup> <ProjectReference Include="..\other\project.csproj" AdditionalProperties="Configuration=$(ReferencedConfiguration)" /> </ItemGroup> </Project>
  2. 防止全局配置在项目间引用之间流动。 这不好,因为它会在目标项目中默认为“调试”,但这是一种可能的处理方式:

     <Project Sdk="Microsoft.NET.Sdk">... <ItemGroup> <ProjectReference Include="..\other\project.csproj" UndefineProperties ="Configuration" /> </ItemGroup> </Project>
  3. 将引用的项目更改为不将“配置”视为全局属性(如果设置并覆盖它)。 这需要在 SDK 导入之前发生,以便正确影响依赖它的所有逻辑:

     <Project TreatAsLocalProperty="Configuration"> <PropertyGroup Condition="'$(Configuration)'.= '' and '$(Configuration)'.= 'Debug' and '$(Configuration)'.= 'Release'"> <Configuration>Release</Configuration> </PropertyGroup> <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />.... (other project content) <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" /> </Project>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM