我有一个包含许多解决方案的大型WPF应用程序,每个解决方案都有许多项目。 IronRuby(v1.0.4)脚本用于按顺序编译所有项目。
问题陈述:
IronRuby脚本无法编译使用“ nameof”运算符的项目,并出现以下错误:
The name 'nameof' does not exist in the current context
我到处搜索过,但找不到适用于更高版本的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.
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
公司。保留所有权利。
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
答案 0 :(得分:1)
要添加更多详细信息,以防万一其他人需要它:
参见类似的问题here。 nameof
是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版本进行了硬编码)。