我有一个.NET Core 3项目,它引用了其他几个项目。我的主根项目具有Release-X
构建配置,但其他项目仅具有Release
配置,没有匹配的Release-X
配置。
当我尝试使用此发布我的主要根项目时...
dotnet publish MyProject.csproj -c Release-X
……似乎为所有引用的项目使用了一些神秘的,不存在的默认构建配置。(我可以知道,因为引用的项目在其所有构建配置中都允许使用不安全的代码,但是使用上述命令进行构建会导致不安全的代码错误。)
我希望能够使用其Release-X
构建配置来构建我的主根项目,但要使用其配置来构建所有引用的项目Release
。我该怎么做呢?
配置值设置为全局属性,该属性在整个项目图上强制执行,直到项目间引用显式更改此属性为止。
有三种方法可以解决此问题,但请注意,由于NuGet还原逻辑的差异,从Visual Studio内部构建或从命令行构建.sln文件时,这可能会导致结果不一致(但如果没有Condition
属性,就可以了)在您的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>
防止全局配置在项目间引用之间流动。这不好,因为它将在目标项目中默认为“ Debug”,但这是一种可能的处理方式:
<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>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句