1

我有一个包含许多解决方案的大型 WPF 应用程序,每个解决方案都有许多项目。IronRuby (v1.0.4) 脚本用于按顺序编译所有项目。

问题陈述
IronRuby 脚本无法编译使用“nameof”运算符的项目,并出现以下错误:

The name 'nameof' does not exist in the current context
  • 在装有 Visual Studio 2017 和 2019 的机器上会出现故障。
  • 在装有 Visual Studio 2015 的机器上运行良好。
  • 如果我在 VS 20XX 中单独编译项目,项目会被正确编译——但这违背了拥有 IR 脚本的目的。

我到处搜索,但找不到它不适用于更高版本的 Visual Studio 的原因。

软件堆栈
1. IronRuby 版本:1.0.4
2. 网络版本:4.5.2 及以上
3. 工作 VS 版本:2015 更新 3
3.(a) MSBuild 工具版本:14.0

C:\Program Files (x86)\MSBuild\14.0\Bin>MSBuild.exe -version Microsoft (R) Build Engine version 14.0.27522.0 版权所有 (C) Microsoft Corporation。版权所有。

14.0.27522.0

3.(b) 从命令提示符编译项目时的消息:

Microsoft (R) Build Engine version 14.0.27522.0
Copyright (C) Microsoft Corporation. All rights reserved.
  1. 不工作的 VS 版本:2019 (v16.2.3)
    4.(a) MSBuild 工具版本:16.0

C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin>MSBuild.exe -version Microsoft (R) Build Engine version 16.2.37902+b5aaefc9f for .NET Framework 版权所有 (C) Microsoft Corporation . 版权所有。

16.2.37902.0

4.(b) 从命令提示符编译项目时的消息:

Microsoft (R) Build Engine 版本 4.7.3190.0
[Microsoft .NET Framework,版本 4.0.30319.42000] 版权所有 (C) Microsoft
Corporation。版权所有。

  1. 两台机器上的 MSBuild 版本给出了相同的结果:
C:\Windows\Microsoft.NET\Framework\v4.0.30319>MSBuild.exe -version
Microsoft (R) Build Engine version 4.7.3190.0
[Microsoft .NET Framework, version 4.0.30319.42000]
Copyright (C) Microsoft Corporation. All rights reserved.

4.7.3190.0

将 3(a)、3(b) 与 4(a)、4(b) 进行比较,看起来在更高版本的 VS 构建引擎中存在断开连接,但我无法解决阻止我去的问题到更高的VS版本。

任何帮助表示赞赏。

谢谢,
RDV

4

2 回答 2

1

要添加更多详细信息以防其他人需要它:

在此处查看类似问题。nameof是 C# 6 的特性,它至少需要 VS2015 的构建引擎。(msbuild 14.0)

所以实际上msbuild 14.0(对于VS2015),msbuild 15.0(对于VS2017),msbuild 16.0(对于VS2019)都可以编译好。在 VS2015 之后,msbuild 是一个单独的构建工具包,它也不需要安装 vs。所以搭建服务器更方便。

C:\Windows\Microsoft.NET\Framework\v4.0.30319>MSBuild.exe

此版本来自 .net 4.0 框架,早于 msbuild 14.0,不支持 C#6 功能。

适用于 VS2017 和 VS2019 的 msbuild 路径:C:\Program Files (x86)\Microsoft Visual Studio\2017 or 2019\build tools or VS version\msbuild\15.0 or current\bin\msbuild.exe. 确保使用正确的 vs 版本并安装必要的工作负载可以帮助避免许多构建问题。希望它可以帮助某人。

于 2019-08-22T03:28:56.600 回答
0

我的构建(ruby)脚本指向一个 compile.rb 类,该类具有硬编码版本来查找 VS2015,如果找不到该版本,则脚本将使用 v4.0 构建,这就是为什么我总是会看到2015 年以上 VS 时的 v4.0。

def path_to_msbuild
    msbuildVS2015path=File.join(ENV['PROGRAMFILES'],"MSBuild/14.0/Bin")
    if File.exist?(msbuildVS2015path)
        File.join(msbuildVS2015path, "/MSbuild.exe /verbosity:quiet")
    else
        versions = ["v4.0.30319", "v3.5", "v2.0.50727"]
        path = File.join(ENV['windir'],"Microsoft.NET/Framework")

修复“msbuildVS2015path”后,构建工作正常(我还没有找到检查任何已安装 VS 版本的方法,但出于我的工作目的,我对 VS2019 版本进行了硬编码)。

于 2019-09-11T20:51:35.903 回答