插值字符串 c# 6.0 和 Stylecop

21

我正在使用Stylecop版本:4.7.49.0

有人使用过c# 6.0中最新的插值字符串功能吗?

示例

var totalUnits = GetUnitsGetTotalIssuedShares(myId);
var testString = $"Test Units :{totalUnits}, have been shipped.";

在构建时,我遇到了StyleCop错误SA0102-因为StyleCop无法解析该文件。似乎还没有可以处理6.0的新版本的StyleCop?

错误:SA0102:在文件中发现语法错误

有没有办法解决这个错误?


Stylecop不是Visual Studio的一部分,最新版本已经发布一年了。一旦更新版本可用,您就需要升级到更高版本。 - Panagiotis Kanavos
只是想知道是否有一种方法可以抑制这个SA0102。 - MicroMan
3
请尝试使用基于Roslyn的StyleCop规则实现:https://github.com/DotNetAnalyzers/StyleCopAnalyzers - Paulo Morgado
Style Cop看起来是一个已经停止维护的项目。最后一个稳定版本发布于2012年1月。https://stylecop.codeplex.com/releases/view/79972 - Colonel Panic
可能是Is StyleCop 4.7 compatible with C# 6.0 code的重复问题。 - Ian Ringrose
2个回答

10

我是一名有用的助手,可以为您翻译以下编程相关内容。请注意,我将尽力使翻译通俗易懂,但不会进行解释或回答问题。

SA0102是一个内部StyleCop错误,因此无法通过设置文件进行抑制或忽略。

您可以通过找到文件名并在csproj中更改该部分来抑制StyleCop对文件的检查:

<Compile Include="<filename>.cs">
  <ExcludeFromStyleCop>True</ExcludeFromStyleCop>
</Compile>

如果您安装了StyleCop插件,可以通过右键单击有问题的文件并选择“从StyleCop中排除”来获得相同的效果。目前需要使用Visual Studio 2015的4.7.50 alpha版本。


现代的做法是利用Visual Studio 2015的Analyzers功能,并使用StyleCop.Analyzers

enter image description here

移动到Stylecop.Analyzers后,这将在相关的*.ruleset文件中添加它们作为规则(与CodeAnalysis规则相同的位置)

enter image description here

而且你可以通过以下方式运行它们

enter image description here

这与右键单击运行 StyleCop具有相同的效果:

即:

enter image description here

这将对C# 6有更好的支持,因为StyleCop 4.7.50支持Visual Studio 2015,并处于alpha阶段,但尚不支持C# 6。


1
我不确定禁用使用6.0功能的文件的样式分析是否是一个好的解决方案。不幸的是,这个版本的StylCop(最后一个版本)与C# 6.0不兼容,所以你要么关闭它,要么希望有人更新并分发一个补丁。 - ChrisCW
1
抱歉?也许 StyleCop 项目 比我更适合成为你发泄不满的出口。 - NikolaiDante
遗憾的是,Stylecop.Analyzers 在 R# 集成方面并没有提供太多支持,只能在构建时进行评估,这使得它对于任何中大型项目都无法使用。 - zaitsman

1

现在,StyleCop应该能够处理C# 6了:

更改Beta 4.7.51:添加了对C# 6.0语法的初始(未经测试)支持

因此,使用稳定版本4.7.54或更高版本,您不应再遇到这个问题:http://stylecop.codeplex.com/releases/view/621306


4
不,显然不行,我刚升级到4.7.54,但仍然存在同样的问题。 :( 但只有当我使用复杂的 $@ 字符串插值时才会出现。尤其是:当你在括号中包含表达式而非变量时。 - Efrain
似乎他们忽略了一些边缘情况。你应该提出一个问题,并提供一些具体的例子让他们知道(http://stylecop.codeplex.com/workitem/list/basic)。 - Hinek
我使用的是4.7.58.3版本,但仍然存在字符串插值和字面量的问题,例如:string x = $@"{var1} is not a number, {var2} is"; - ps2goat
看起来这是由于在插值内部使用嵌套引号的代码引起的,例如 string x = $@"Today is {myDate.ToString(@"MM/dd/yyyy")}."; 之前的问题已经关闭,因为它是这个问题的重复:https://stylecop.codeplex.com/workitem/7721。 - ps2goat
更新:4.7.58.3是我使用的StyleCop库的NuGet包版本,所以那不是正确的版本。我将不得不更新到CodePlex上的官方StyleCop扩展。 - ps2goat

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