【发布时间】:2019-11-11 16:38:26
【问题描述】:
我有一台 Windows 2016 服务器,我将其设置为构建服务器。将设置为使用 MSBuild 构建 .NET 4.6.1 Web API 项目我使用的是 MSBuild 版本 15.0,并使用 TeamCity 版本 2018.1,但是我不相信 TeamCity 真的参与了这个问题,因为我得到了这个问题手动/直接针对代码执行 MSBuild
Windows 2016 具有 .NET 4.7,因此我安装了 .NET 4.6.1 目标包和 .NET 4.6.1 SDK。在 TeamCity 的构建步骤中,我有一个 MSBuild 参数“/p:TargetFramework=net461”但是在构建日志中,当我手动/直接针对代码运行 MSBuild 时,我收到以下错误:
HttpExtensions.cs(44, 24): error CS8137: Cannot define a class or member that utilizes tuples because the compiler required type 'System.Runtime.CompilerServices.TupleElementNamesAttribute' cannot be found. Are you missing a reference?
HttpExtensions.cs(44, 24): error CS8179: Predefined type 'System.ValueTuple`2' is not defined or imported
当我在安装了 Visual Studio 2017 的开发计算机上时,项目构建没有问题。我的开发机器是Windows 10,但另一个主要区别是Windows 2016服务器没有Visual Studio。我的想法是这与 Windows 2016 的主要 .NET 版本为 4.7 有关,安装 Visual Studio 可能会解决这个问题。但我真的很想避免在 Windows 2016 服务器上安装 Visual Studio
有什么想法/反馈吗?
【问题讨论】:
-
我不知道 TeamCity,但 Team Foundation Server 需要在构建机器上安装 Visual Studio 才能始终如一地工作。确保两台机器上都安装了相同的框架 sdk 版本。
-
至于@Eldar。另外,我相信如果您是通过 MS Build 构建的,则需要以正确的顺序获取依赖项,否则它将无法构建。 Visual Studio 构建将解决它,但 MS Build 不会。即使安装了 VS,您也可能需要编辑 .csproj 文件以通过 MS Build 获得正确的构建顺序。无法添加为答案,因为没有看到设置就很难解决。
-
如果您不想安装 Net,那么您需要发布应用程序并运行使用安装程序创建的 setup.exe 以使应用程序运行。
-
您使用哪个 MSBuild.exe?考虑在同一台机器上有多个这一事实。
-
我使用的是 MSBuild 15.0 版。当我运行 MSBuild 时,我专门选择此版本并直接针对产生错误的代码库运行