使用Visual Studio构建项目没有问题,但在命令行中失败

4

我有一个解决方案,当通过Visual Studio 2015运行时构建正常,但当我从命令行运行时遇到错误

错误CS1056:此行上出现意外字符"$"。

var CutOffTextFragment = deadLineTime.Deadline.Minute == 0 ? $"{deadLineTime.Deadline:htt}" : $"{deadLineTime.Deadline:h:mmtt}"

deadLineTime.Deadline是一个DateTime对象,该代码将返回XAM/PM或X:XXAM/PM

我认为这是因为构建脚本没有使用C#6所导致的。目前无法更改此脚本以使用c# 6。

如果是这种情况,有人可以帮我使代码适用于C#5吗?


1
最好提供正确的参数来构建,这样它就可以使用C#6代码,而不是更改代码。 - Sergey Kalinichenko
3个回答

9
该功能是C#6的语法糖,尝试安装最新版本的框架4.6.2https://www.microsoft.com/en-us/download/details.aspx?id=53345,然后转到项目属性并在应用程序选项中更改目标框架以指向最新版本。您无需更改代码以将字符串插值替换为string.Format方法来修复它。
如果你仍然遇到这个错误,可能是因为运行构建的编译器不是最新版本的C#。尝试从Nuget添加Microsoft.Net.Compilers并重新编译,这应该解决问题。如果你想避免安装此包,请尝试打开你的.csproj文件并查看ToolsVersion,它应该指向版本12,然后将其更改为14,但请确保你已经安装了最新版本的MSBuildhttps://www.microsoft.com/en-us/download/details.aspx?id=48159,或者前往C:\Program Files (x86)\MSBuild\14.0\Bin,在那里你应该有这个带有csc.exe编译器的文件夹。如果即使这样也无法解决问题,则尝试按照这些步骤https://msdn.microsoft.com/en-us/library/bb383985.aspx操作。根据我的经验,只需从Nuget获取软件包即可解决问题。希望这可以帮到你。

3
没错!对我而言,只需添加Microsoft.Net.Compilers NuGet包就可以了。 - jmbmage
工作得非常完美!关于升级到最新的框架来解决问题的建议很好。 - Spencer

-3

$ 可以转换为 string.format。

var CutOffTextFragment = deadLineTime.Deadline.Minute == 0 
                         ? 
                         string.Format("{0:htt}",deadLineTime.Deadline) 
                         : 
                         string.Format("{0:h:mmtt}", deadLineTime.Deadline);

-5
$"{deadLineTime.Deadline:htt}"

是一个语法糖,用于

string.Format("{0:htt}", deadline.Deadline);

同样适用于

$"{deadLineTime.Deadline:h:mmtt}"

作为

string.Format("{0:h:mmtt}", deadline.Deadline);

尝试替换它们

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接