gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:40:10 30 4
gpt4 key购买 nike

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

当我尝试使用这个发布我的主根项目时......
dotnet publish MyProject.csproj -c Release-X
...它似乎对所有引用的项目使用了一些神秘的不存在的默认构建配置。 (我可以判断,因为引用的项目在其所有构建配置中都允许使用不安全代码,但使用上述命令进行构建会导致不安全代码错误。)

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

最佳答案

配置值设置为 global property,它在整个项目图上强制执行,直到项目到项目的引用显式更改此值。
有三种方法可以解决这个问题,但请注意,由于 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>
  • 防止全局配置跨项目到项目引用流动。这不好,因为它会在目标项目中默认为“调试”,但这是一种可能的处理方式:
     <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>
  • 关于.net - 使用 `dotnet build` 或 `dotnet publish` 时如何为引用的项目指定构建配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58258842/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com