我有针对多 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.6
和 net45
并在 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.1
和 netstandard1.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/