【问题标题】:Interpolate string c# 6.0 and Stylecop插入字符串 c# 6.0 和 Stylecop
【发布时间】:2015-10-14 09:06: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: 在文件中发现语法错误

这个错误是否存在?

【问题讨论】:

标签: c# visual-studio-2015 stylecop c#-6.0


【解决方案1】:

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

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

因此,使用稳定版本 4.7.54 或更高版本您应该不会再遇到这种情况:http://stylecop.codeplex.com/releases/view/621306

【讨论】:

  • 不,显然不是,我刚刚升级到 4.7.54,我仍然遇到同样的问题。 :( 但是,仅当我使用复杂的 $@ 字符串插值时。最值得注意的是:当您在括号中包含带括号的表达式时,而不是变量。
  • 似乎他们忽略了一些边缘情况。您应该使用一些具体示例打开一个问题,让他们知道 (stylecop.codeplex.com/workitem/list/basic)。
  • 我有 4.7.58.3,但字符串插值 + 文字仍有问题,例如,string x = $@"{var1} is not a number, {var2} is";
  • 它看起来是由在插值内使用带有嵌套引号的代码引起的,例如string x = $@"Today is {myDate.ToString(@"MM/dd/yyyy")}."; 并且上一期已关闭,因为它与本期重复:stylecop.codeplex.com/workitem/7721
  • 更新:4.7.58.3 是我用于 stylecop 库的 nuget 包的版本,所以这不是正确的版本。我必须更新到 codeplex 上的官方 stylecop 扩展。
【解决方案2】:

SA0102 是 internal stylecop error,因此不能通过设置文件抑制或忽略。

您可以通过在 csproj 中找到文件名并将部分更改为该文件来抑制 stylecop 中的文件:

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

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


更现代的方法是利用 Visual Studio 2015 的分析器功能,StyleCop.Analyzers

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

你可以通过

运行它们

与右键Run StyleCop效果相同:

即给予:

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

【讨论】:

  • 我不确定这是禁用每个使用 6.0 功能的文件的样式分析的好方法。不幸的是,这个版本的 StylCop(最后一个版本)与 C# 6.0 不兼容,因此您要么必须将其关闭,要么希望有人更新并分发补丁。
  • 嗯...对不起?也许style cop project 比我更能发泄你的不满。
  • 遗憾的是,Stylecop.Analyzers 并没有提供太多的 R# 集成方式,并且只能在构建时进行评估,这使得它无法用于任何中大型项目。
猜你喜欢
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 2016-01-19
  • 1970-01-01
  • 2014-09-12
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多