我正在将项目转换为新的.csproj
格式,并将其设置为netstandard2.0和net45。它在我的机器上工作正常,但在尝试构建netstandard2.0时,在我们的构建服务器上失败了。 net45的构建运行没有错误。日志的一部分:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\bin\Roslyn\csc.exe <lots of parameters>
Using shared compilation with compiler from directory: C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\bin\Roslyn
error CS0234: The type or namespace name 'Serialization' does not exist in the namespace 'System.Runtime' (are you missing an assembly reference?)
error CS0246: The type or namespace name 'BinaryFormatter' could not be found (are you missing a using directive or an assembly reference?)
error CS0246: The type or namespace name 'ICloneable' could not be found (are you missing a using directive or an assembly reference?)
我知道这些类型在2.0版之前不存在,但目前还不清楚它是如何找不到它们的。 .Net Core 2.0 SDK似乎安装在构建服务器上,除了我尝试使用较低版本的SDK运行它,它明确地告诉我要针对不同版本的标准。据我所知,从版本2.0开始,不需要对项目文件中的标准库进行显式依赖。
这些错误可能是什么原因?
我们使用Teamcity MsBuild构建运行器运行的MsBuild脚本,其中ToolsVersion = 15.0。
答案 0 :(得分:2)
好吧,我似乎已经找到了答案。
MsBuild runner使用安装的SDK作为Visual Studio的一部分进行构建,而VS仅在15.3版中为.NET Core 2.0 SDK添加了适当的支持。一些早期版本安装在构建服务器上。错误是由于它无法解析正确的SDK并使用旧版本的dll而引起的。传递给编译器的参数之一(注意标准的版本):reference:C:\Users\buildserver\.nuget\packages\system.runtime\4.3.0\ref\netstandard1.5\System.Runtime.dll /
。
解决此问题的一种方法是在构建服务器上将Visual Studio更新为15.3。我在this answer中找到了解决方法。
答案 1 :(得分:1)
您只能安装Visual Studio 2017 Build工具
(https://www.visualstudio.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=15