.NetFramework4.6.1 项目引用 .NetStandard2.0 上的 VSTS 构建任务失败

VSTS build task fails on a .NetFramework4.6.1 project references .NetStandard2.0

⚠️ I already created an issue in dotnet/standard

Question has been updated with simplified code reference that you may reproduce it on your own environment. (Screenshots of VSTS settings are available in readme file)

到目前为止,在 LOCAL 环境中一切正常。 当我 运行 在 Visual Studio Team Services 上构建时,它会抛出下面的 error/s

错误信息

[error]src\Ninja.Dojo\Fight.cs(18,19): Error CS0012: The type 'IServiceProvider' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.

项目

  1. libraries .Net Standard 2 项目将在构建时创建 Nuget 文件。
  2. host 引用第一个项目库的 .Net Framework 4.6.1 项目。

从 VSTS 生成日志

2017-08-18T14:59:35.5041535Z ##[section]Starting: Build solution **\*.sln
2017-08-18T14:59:35.5051537Z ==============================================================================
2017-08-18T14:59:35.5051537Z Task         : Visual Studio Build
2017-08-18T14:59:35.5051537Z Description  : Build with MSBuild and set the Visual Studio version property
2017-08-18T14:59:35.5051537Z Version      : 1.120.0
2017-08-18T14:59:35.5051537Z Author       : Microsoft Corporation
2017-08-18T14:59:35.5051537Z Help         : [More Information](https://go.microsoft.com/fwlink/?LinkID=613727)
2017-08-18T14:59:35.5051537Z ==============================================================================
2017-08-18T14:59:48.6257526Z ##[command]"D:\a\_tasks\VSBuild_71a9a2d3-a98a-4caa-96ab-affca411ecda.120.0\ps_modules\MSBuildHelpers\vswhere.exe" -version [15.0,16.0) -latest -format json
2017-08-18T14:59:51.6300908Z ##[command]"C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\MSBuild.0\Bin\amd64\msbuild.exe" "d:\a\s\Master.sln" /nologo /nr:false /dl:CentralLogger,"D:\a\_tasks\VSBuild_71a9a2d3-a98a-4caa-96ab-affca411ecda.120.0\ps_modules\MSBuildHelpers\Microsoft.TeamFoundation.DistributedTask.MSBuild.Logger.dll";"RootDetailId=87bd1e1e-4dcf-4d71-8cb7-fc0125dab831|SolutionDir=d:\a\s"*ForwardingLogger,"D:\a\_tasks\VSBuild_71a9a2d3-a98a-4caa-96ab-affca411ecda.120.0\ps_modules\MSBuildHelpers\Microsoft.TeamFoundation.DistributedTask.MSBuild.Logger.dll"  /p:platform="any cpu" /p:configuration="release" /p:VisualStudioVersion="15.0" /p:_MSDeployUserAgent="VSTS_9f6183ec-4019-4b83-8c63-ab568eabce20_build_42_364"
2017-08-18T14:59:52.3397972Z Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.
2017-08-18T14:59:52.5302712Z Build started 8/18/2017 2:59:52 PM.
2017-08-18T14:59:52.8926831Z Project "d:\a\s\Master.sln" on node 1 (default targets).
2017-08-18T14:59:52.8946824Z ValidateSolutionConfiguration:
2017-08-18T14:59:52.8946824Z   Building solution configuration "release|any cpu".
2017-08-18T14:59:53.2070570Z Project "d:\a\s\Master.sln" (1) is building "d:\a\s\src\Ninja.Dojo\Ninja.Dojo.csproj" (2) on node 1 (default targets).
2017-08-18T14:59:53.2070570Z PrepareForBuild:
2017-08-18T14:59:53.2070570Z   Creating directory "bin\Release\".
2017-08-18T14:59:53.2080251Z   Creating directory "obj\Release\".
2017-08-18T14:59:53.8416739Z CoreCompile:
2017-08-18T14:59:53.8556757Z   C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\MSBuild.0\Bin\Roslyn\csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /warn:4 /define:TRACE /highentropyva+ /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Microsoft.CSharp.dll" /reference:d:\a\s\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.0.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll /reference:d:\a\s\packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\mscorlib.dll" /reference:d:\a\s\packages\Ninja.Abstractions.1.0.363\lib\netstandard2.0\Ninja.Abstractions.dll /reference:d:\a\s\packages\Ninja.Domain.1.0.363\lib\netstandard2.0\Ninja.Domain.dll /reference:d:\a\s\packages\System.AppContext.4.3.0\lib\net46\System.AppContext.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.ComponentModel.Composition.dll" /reference:d:\a\s\packages\System.Console.4.3.0\lib\net46\System.Console.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Data.DataSetExtensions.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Data.dll" /reference:d:\a\s\packages\System.Diagnostics.DiagnosticSource.4.4.1\lib\net46\System.Diagnostics.DiagnosticSource.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.dll" /reference:d:\a\s\packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll /reference:d:\a\s\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.IO.Compression.FileSystem.dll" /reference:d:\a\s\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll /reference:d:\a\s\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll /reference:d:\a\s\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll /reference:d:\a\s\packages\System.Net.Http.4.3.2\lib\net46\System.Net.Http.dll /reference:d:\a\s\packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Numerics.dll" /reference:d:\a\s\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll /reference:d:\a\s\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net461\System.Security.Cryptography.Algorithms.dll /reference:d:\a\s\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll /reference:d:\a\s\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll /reference:d:\a\s\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Xml.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Xml.Linq.dll" /reference:d:\a\s\packages\System.Xml.ReaderWriter.4.3.0\lib\net46\System.Xml.ReaderWriter.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Collections.Concurrent.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Collections.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.ComponentModel.Annotations.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.ComponentModel.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.ComponentModel.EventBasedAsync.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Diagnostics.Contracts.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Diagnostics.Debug.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Diagnostics.Tools.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Diagnostics.Tracing.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Dynamic.Runtime.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Globalization.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.IO.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Linq.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Linq.Expressions.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Linq.Parallel.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Linq.Queryable.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Net.NetworkInformation.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Net.Primitives.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Net.Requests.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Net.WebHeaderCollection.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.ObjectModel.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Reflection.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Reflection.Emit.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Reflection.Emit.ILGeneration.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Reflection.Emit.Lightweight.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Reflection.Extensions.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Reflection.Primitives.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Resources.ResourceManager.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Runtime.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Runtime.Extensions.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Runtime.Handles.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Runtime.InteropServices.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Runtime.InteropServices.WindowsRuntime.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Runtime.Numerics.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Runtime.Serialization.Json.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Runtime.Serialization.Primitives.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Runtime.Serialization.Xml.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Security.Principal.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.ServiceModel.Duplex.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.ServiceModel.Http.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.ServiceModel.NetTcp.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.ServiceModel.Primitives.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.ServiceModel.Security.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Text.Encoding.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Text.Encoding.Extensions.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Text.RegularExpressions.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Threading.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Threading.Tasks.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Threading.Tasks.Parallel.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Threading.Timer.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Xml.XDocument.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Facades\System.Xml.XmlSerializer.dll" /debug:pdbonly /filealign:512 /optimize+ /out:obj\Release\Ninja.Dojo.dll /ruleset:"C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\Team Tools\Static Analysis Tools\Rule Sets\MinimumRecommendedRules.ruleset" /subsystemversion:6.00 /target:library /utf8output Fight.cs Properties\AssemblyInfo.cs "d:\a\_temp\.NETFramework,Version=v4.6.1.AssemblyAttributes.cs"
2017-08-18T14:59:53.8716763Z   Using shared compilation with compiler from directory: C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\MSBuild.0\Bin\Roslyn
2017-08-18T14:59:54.8517055Z ##[error]src\Ninja.Dojo\Fight.cs(18,19): Error CS0012: The type 'IServiceProvider' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
2017-08-18T14:59:54.8517055Z Fight.cs(18,19): error CS0012: The type 'IServiceProvider' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. [d:\a\s\src\Ninja.Dojo\Ninja.Dojo.csproj]
2017-08-18T14:59:54.8577237Z Done Building Project "d:\a\s\src\Ninja.Dojo\Ninja.Dojo.csproj" (default targets) -- FAILED.
2017-08-18T14:59:54.8597063Z Done Building Project "d:\a\s\Master.sln" (default targets) -- FAILED.
2017-08-18T14:59:54.8617060Z 
2017-08-18T14:59:54.8617060Z Build FAILED.
2017-08-18T14:59:54.8667067Z 
2017-08-18T14:59:54.8687069Z "d:\a\s\Master.sln" (default target) (1) ->
2017-08-18T14:59:54.8687069Z "d:\a\s\src\Ninja.Dojo\Ninja.Dojo.csproj" (default target) (2) ->
2017-08-18T14:59:54.8687069Z (CoreCompile target) -> 
2017-08-18T14:59:54.8687069Z   Fight.cs(18,19): error CS0012: The type 'IServiceProvider' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. [d:\a\s\src\Ninja.Dojo\Ninja.Dojo.csproj]
2017-08-18T14:59:54.8687069Z 
2017-08-18T14:59:54.8687069Z     0 Warning(s)
2017-08-18T14:59:54.8687069Z     1 Error(s)
2017-08-18T14:59:54.8687069Z 
2017-08-18T14:59:54.8687069Z Time Elapsed 00:00:02.34
2017-08-18T14:59:56.8168716Z ##[error]Process 'msbuild.exe' exited with code '1'.
2017-08-18T14:59:56.8408732Z ##[section]Finishing: Build solution **\*.sln

请指教

你的 packages.config 长什么样?我认为您可能想要添加 NETStandard.Library 以便在 运行 nuget 恢复时下载程序集:https://www.nuget.org/packages/NETStandard.Library/

Microsoft.NETCore.Platforms 包用于此目的:

Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages.