我使用.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参数?
答案 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