gpt4 book ai didi

linux - 如何在 Mac 或 Linux 上的 .NET Core 上构建多目标解决方案?

转载 作者:IT王子 更新时间:2023-10-29 00:33:33 25 4
gpt4 key购买 nike

我有针对多 objective-c sproj 文件的解决方案:

<PropertyGroup>
<TargetFrameworks>net45;netstandard1.6</TargetFrameworks>
</PropertyGroup>

<PropertyGroup>
<TargetFrameworks>net45;netcoreapp1.1</TargetFrameworks>
</PropertyGroup>

我正在尝试在 Linux 上构建此解决方案的 .NET Core 部分,但无法管理它。如果我跑

dotnet build

它构建了所有目标:netcoreapp1.1 , netstandard1.6net45并在 net45 上失败,因为 .NET Core 不在 Linux 上提供 .NET 4.5 平台。我试图通过将 mono 指定为构建框架来解决此问题,但解决方案很复杂,而且并不是所有 .NET 4.5 的东西都在 mono 中受支持。然而,这可以帮助其他人避免 can't find .NETFramework v4.5只需运行:

FrameworkPathOverride=/usr/lib/mono/4.5/ dotnet restore
FrameworkPathOverride=/usr/lib/mono/4.5/ dotnet build

当我运行 dotnet build /p:TargetFramework=netcoreapp1.1我遇到了很多错误,我想是因为带有 netstandard1.6 的项目没有建成。

如果我通过了

  dotnet build /p:TargetFrameworks=netcoreapp1.1\;netstandard1.6

我明白了

MSBUILD : error MSB1006: Property is not valid.
Switch: netstandard1.6

我怎样才能通过 netcoreapp1.1netstandard1.6从命令行同时将目标框架定位到 msbuild?

我知道我可以添加额外的属性并根据它进行条件编译,但我不想更改 csproj 来实现此解决方法。

最佳答案

如果您真的不想尝试在 Linux 上构建完整的框架或 PCL 版本,而只想要一个 .net 核心应用程序或 .net 标准库,您可以修改项目文件 (.csproj) 仅在 Windows 上实现多目标,并且在非 Windows 上表现得像一个针对单个框架的项目,如下所示:

<PropertyGroup>
<TargetFrameworks>netcoreapp1.1;net45</TargetFrameworks>
<TargetFrameworks Condition="'$(OS)' != 'Windows_NT'">netcoreapp1.1</TargetFrameworks>
</PropertyGroup>

这允许为所有项目分别为非 Windows 指定 netstandard*netcoreapp*,并且仅使用 .net core 版本的应用程序将能够仅使用普通 dotnet restore/dotnet build 命令。

关于linux - 如何在 Mac 或 Linux 上的 .NET Core 上构建多目标解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43555302/

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