IronRuby无法编译使用'nameof'运算符的c#项目

时间:2019-08-21 21:19:35

标签: visual-studio-2015 msbuild visual-studio-2019 nameof

我有一个包含许多解决方案的大型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版本14.0.27522.0版权所有(C)   微软公司。保留所有权利。

     

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   适用于.NET的Microsoft(R)Build Engine版本16.2.37902 + b5aaefc9f   框架版权所有(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
  公司。保留所有权利。

    两台计算机上的
  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版本的wrt构建引擎中存在断开连接,但是我无法解决阻止该问题的问题我不再使用更高的VS版本。

感谢您的帮助。

谢谢,
RDV

2 个答案:

答案 0 :(得分:1)

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

参见类似的问题herenameof是C#6功能,它至少需要VS2015的构建引擎。(msbuild 14.0)

实际上msbuild 14.0(对于VS2015),msbuild 15.0(对于VS2017),msbuild 16.0(对于VS2019)可以很好地进行编译。在VS2015之后,msbuild是单独的build tools package,它也不需要安装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版本并安装必要的工作负载可以帮助避免许多构建问题。希望对别人有帮助。

答案 1 :(得分:0)

有一个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版本进行了硬编码)。