.net core dotnet build ignore--仅具有FrameworkTarget的项目的框架参数

.net core dotnet build ignore--仅具有FrameworkTarget的项目的框架参数,.net-core,.net Core,我使用.NET Core SDK版本2.1.302。我的解决方案有两种类型的项目:库和web。所有库都以.NET标准2.0为目标:netstandard2.0,web项目有多个目标:net462;netcoreapp2.0 我有两个CI版本:用于使用net462的Windows和基于linux和netcoreapp2.0的内置docker 在docker build中构建我的解决方案时,我使用以下代码行: RUN dotnet build ./MySolution.sln --configura

我使用.NET Core SDK版本
2.1.302
。我的解决方案有两种类型的项目:库和web。所有库都以.NET标准2.0为目标:
netstandard2.0
,web项目有多个目标:
net462;netcoreapp2.0

我有两个CI版本:用于使用net462的Windows和基于linux和netcoreapp2.0的内置docker

在docker build中构建我的解决方案时,我使用以下代码行:

RUN dotnet build ./MySolution.sln --configuration Release --framework netcoreapp2.0
生成失败,错误如下:

资产文件“/app/MyLibraryProject/obj/project.Assets.json”没有“.NETCoreApp,Version=v2.0”的目标。确保已运行还原,并且已将“netcoreapp2.0”包含在项目的TargetFrameworks中。[/app/MyLibraryProject.csproj]

这是因为正如我前面提到的,我的库项目只针对一个框架——netstandard2.0


那么,我的问题是如何应对这种情况?我应该如何指定只有一个目标框架的项目应该忽略——framework param?

为了确保答案被注意到,我发现最好的解决方法是@JoséPedro从上述评论流中提出的解决方案

在csproj文件中,我对
TargetFramework
元素设置了一个条件。现在看来如下:

net472;netcoreapp2.1
netcoreapp2.1
默认情况下,它将同时编译这两个文件,但您可以传递
CoreOnly
参数以仅编译.NET核心框架


dotnet build MySolution.sln/p:CoreOnly=True

我认为有两种选择:构建主项目而不是解决方案,或者使用msbuild根据环境定义目标框架(您可以使用
$(OS)
,或者在
dotnet build
命令中传递一些自定义属性).我不想使用单独的项目构建,因为我也有测试项目,我也应该单独构建。添加新项目后,我应该再次更改构建脚本。看起来要做很多工作。自定义参数呢:看起来可以使用它,但可能我错过了一个更简单的内置键解决方案,如
--framework
第二个选项基本上是使用自定义参数,例如
运行dotnet build./MySolution.sln--configuration Release/p:BuildCoreOnly=True
。您只需要将条件属性添加到项目中,如
netcoreapp2.0
。无法尝试您的解决方案,因为我的项目已完全迁移到.NET Core,并且我不再存在此问题,但看起来此技巧应该有效。非常感谢。我使用这个技巧在并行构建中为netcoreapp2.1和netcoreapp3.1目标框架构建,它确实有效。非常感谢。