[英]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)
的项目引用)
为引用的项目设置显式配置(我建议使用它):
<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>
防止全局配置在项目间引用之间流动。 这不好,因为它会在目标项目中默认为“调试”,但这是一种可能的处理方式:
<Project Sdk="Microsoft.NET.Sdk">... <ItemGroup> <ProjectReference Include="..\other\project.csproj" UndefineProperties ="Configuration" /> </ItemGroup> </Project>
将引用的项目更改为不将“配置”视为全局属性(如果设置并覆盖它)。 这需要在 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.