问题描述
同事发给我的一个小程序,打开以后编译报错,错误信息:
意外的字符“$”
问题分析
出错代码如下:
#region 获取电脑UUID
/// <summary>
/// 获取电脑UUID
/// </summary>
/// <returns></returns>
public static string GetUuid()
{
var uuid = string.Empty;
var computerName = "localhost";
var scope = new ManagementScope($"\\\\{computerName}\\root\\CIMV2", null); //此行代码出错
scope.Connect();
ObjectQuery query = new ObjectQuery("SELECT UUID FROM Win32_ComputerSystemProduct");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
foreach (var wmiObject in searcher.Get())
{
uuid = wmiObject["UUID"].ToString();
}
return uuid.Replace("-","");
}
#endregion
经过分析发现同事的VS开发环境使用的是.netframework4.72,而我电脑安装的VS2013,最高支持.netframework4.5,我平时开发都是基于.netframework4.0的。而出错的哪行代码语法之后.netframework4.7以上才支持。
解决方法
1、升级开发环境,安装.netframework4.72。
2、把出错的代码改为.netframework4.0支持的。
考虑到实际使用环境,我把代码改为.netframework4.0支持的,如下:
#region 获取电脑的UUID
/// <summary>
/// 获取电脑的UUID
/// </summary>
/// <returns>返回电脑的UUID</returns>
public static string GetUuid()
{
var uuid = string.Empty;
var computerName = "localhost";
var scope = new ManagementScope(String.Format("\\\\{0}\\root\\CIMV2", computerName), null);
scope.Connect();
ObjectQuery query = new ObjectQuery("SELECT UUID FROM Win32_ComputerSystemProduct");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
foreach (var wmiObject in searcher.Get())
{
uuid = wmiObject["UUID"].ToString();
}
return uuid.Replace("-", String.Empty);
}
#endregion