对于仅使用FrameworkTarget的项目,dotnet构建忽略--framework参数

时间:2018-08-15 15:15:33

标签: .net-core

我使用.NET Core SDK版本2.1.302。我的解决方案有两种类型的项目:库和Web。所有库都针对.NET Standard 2.0:<TargetFramework>netstandard2.0</TargetFramework>,并且Web项目具有多个目标:<TargetFrameworks>net462;netcoreapp2.0</TargetFrameworks>

我有两个CI构建:对于使用net462的Windows,以及在具有netcoreapp2.0的基于Linux的docker中构建。

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

RUN dotnet build ./MySolution.sln --configuration Release --framework netcoreapp2.0

构建失败,并出现以下错误:

  

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

发生这种情况是因为正如我之前提到的,我的库项目仅针对一个框架-netstandard2.0

所以,我的问题是如何处理这种情况?我应该如何指定仅具有一个目标框架的项目应忽略--framework参数?

1 个答案:

答案 0 :(得分:1)

为了确定答案是否正确,我发现解决此问题的最佳方法是上述评论流中的@JoséPedro解决方案。

在csproj文件中,我在TargetFramework元素上添加了一个条件。现在看起来如下:

<TargetFrameworks Condition="'$(CoreOnly)' != 'True'">net472;netcoreapp2.1</TargetFrameworks>
<TargetFramework Condition="'$(CoreOnly)' == 'True'">netcoreapp2.1</TargetFramework>

默认情况下,它将同时编译这两个程序,但是您可以传递一个CoreOnly参数来仅编译.NET Core框架。

dotnet build MySolution.sln /p:CoreOnly=True