Teamcity上的.Net Standard 2.0版本失败

时间:2017-10-06 15:51:43

标签: .net msbuild teamcity .net-standard-2.0

我正在将项目转换为新的.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。

2 个答案:

答案 0 :(得分:2)

好吧,我似乎已经找到了答案。

MsBuild runner使用安装的SDK作为Visual Studio的一部分进行构建,而VS仅在15.3版中为.NET Core 2.0 SDK添加了适当的支持。一些早期版本安装在构建服务器上。错误是由于它无法解析正确的SDK并使用旧版本的dll而引起的。传递给编译器的参数之一(注意标准的版本):reference:C:\Users\buildserver\.nuget\packages\system.runtim‌​e\4.3.0\ref\netstand‌​ard1.5\System.Runtim‌​e.dll /

解决此问题的一种方法是在构建服务器上将Visual Studio更新为15.3。我在this answer中找到了解决方法。

答案 1 :(得分:1)