标签: roslyn-code-analysis

Roslyn 源生成器被“忽略”?

我正在创建一个简单的 Roslyn 源生成器。生成器在调试中似乎运行良好,可以正确生成所需的类。但是,当从解决方案中的另一个项目引用它时,它附近会显示一个红色图标,并带有“忽略”工具提示,并且不会生成任何输出:

被忽视了!

生成器代码非常简单:

namespace CompetencesSourceGenerator
{
    using Microsoft.CodeAnalysis;

    [Generator]
    public class CompetenceNamesGenerator: CompetenceGeneratorBase
    {
        public override void Execute(GeneratorExecutionContext context)
        {
            context.AddSource(
                "CompetenceNames.g.cs",
                @"namespace Foo { public class Bar { } }"
            );
        }
    }
}

Run Code Online (Sandbox Code Playgroud)

我检查了以下内容:

  • Generator 项目面向 .NET Standard 2.0
  • 引用项目目标 .NET 6
  • Microsoft.CodeAnalysis.CSharp生成器项目中的和Microsoft.CodeAnalysis.Analyzers都是最新的
  • VS 已更新 (17.4.4)
  • .NET 编译器平台 SDK 已安装

为什么它不起作用?

c# roslyn roslyn-code-analysis sourcegenerators

11
推荐指数
1
解决办法
1667
查看次数

“带有代码修复的分析器”项目模板已损坏

简短问题:如何在 Visual Studio 2019 v16.6.2 中使用工作单元测试项目设置 roslyn 代码分析器项目?

几个月前(以及一些 Visual Studio 更新),我尝试使用“Analyzer with Code Fix (.NET Standard)”项目模板设置代码分析器项目。它运行良好,并且正如所有可用的操作方法中所记录的那样。

今天(VS2019 v16.6.2)我想开始一个真正的分析器项目,但不幸的是更新的模板似乎已损坏或发布,还有很多未完成的工作正在进行中。(一个小问题是包管理器突然似乎无法恢复包,因为它不喜欢使用与分析器项目相同的程序集名称的 vsix 项目。)

该模板包含一个单元测试项目。在我试验的早期版本中,这个测试项目包含大量代码,这些代码充当测试基础设施,使开发人员可以轻松地针对真实代码测试分析器。

所有这些代码现在似乎都集成在许多特定于语言的 nuget 包中。但是这些包

这些是显然需要的包引用(省略测试框架包):

  • Microsoft.CodeAnalysis.CSharp.Analyzer.Testing.MSTest v1.0.1-beta1.20384.1
  • Microsoft.CodeAnalysis.CSharp.CodeFix.Testing.MSTest v1.0.1-beta1.20384.1
  • Microsoft.CodeAnalysis.CSharp.CodeRefactoring.Testing.MSTest v1.0.1-beta1.20384.1

这是示例单元测试代码:

using System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.UnitTesting;

using Verify = Microsoft.CodeAnalysis.CSharp.CodeFix.Testing.MSTest.CodeFixVerifier<
    Analyzer1.Analyzer1Analyzer,
    Analyzer1.Analyzer1CodeFixProvider>;

namespace Analyzer1.Test
{
    [TestClass]
    public class UnitTest
    {
        //No diagnostics expected to show up
        [TestMethod]
        public async Task TestMethod1()
        {
            var test = …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing roslyn-code-analysis visual-studio-2019

10
推荐指数
2
解决办法
1163
查看次数

对规则集文件与 editorconfig 文件感到困惑

我们的组织使用包含我们组织的 StyleCop.Analyzers 设置的规则集文件。这存在于源代码控制中,我们组织中所有解决方案中的所有项目都引用此文件。如果我编辑规则集(通过项目属性 -> 代码分析选项卡),我会看到一条消息,提示我将规则集迁移到 editorconfig 文件。有人可以解释为什么我想要这样做,两者之间有什么区别?

我还注意到在 VS 工具->选项->文本编辑器->C#->代码样式中,有许多设置与许多 StyleCop.Analyzers 规则非常相似(例如,与使用“this ", vs StyleCop SA1101 "用这个前缀本地调用")。这里还有一个按钮可以根据这些设置创建 editorconfig 文件,那么这些设置如何与 StyleCop.Analyzer 设置共存,哪个优先?

此外,我们的 Azure DevOps 自动生成报告警告,其中任何代码“违反”了 StyleCop 规则。如果我们用 editorconfig 文件替换规则集,构建是否仍会执行此操作?

最后,有一个用于编辑 StyleCop.Analyzer 设置的 GUI(项目属性 -> 代码分析选项卡 ->“配置”按钮),而 editorconfig 文件似乎是使用 VS 文本编辑器编辑的。鉴于有数百条规则需要管理,您从哪里获得需要输入的完整规则列表?这会不会很乏味?

visual-studio editorconfig roslyn-code-analysis visual-studio-2019

10
推荐指数
1
解决办法
2384
查看次数

我可以强制使用非详尽的 C# 开关表达式来导致编译错误吗?

我喜欢将枚举映射到值的开关表达式 - 虽然不是最具可扩展性的解决方案,但如果枚举代表某种模式(并且不是很大),它会快速且相当干净。

错误的一个常见来源是向枚举添加成员 - 这通常会导致新情况得不到处理。

但我认为,如果我们能够为非详尽的开关提供编译错误,从而使遗漏变得易于可见和修复,那么这些错误几乎可以被消除。(默认情况必须省略,否则就没有意义了)

这可能吗?我在想这样的事情:

public string GetTargetValue()
{
    return target switch
   {
       Target.A => "foo",
       Target.B => "bar",
       // Compile error if someone added Target.C, otherwise works fine
       // no default case - it would defeat the point
   };
}
Run Code Online (Sandbox Code Playgroud)

PS:我主要在 Unity 中工作,但据我了解,较新版本的 Unity 使用 Roslyn 编译器(我不使用burst),所以我认为这并不重要。

c# roslyn-code-analysis

10
推荐指数
1
解决办法
1978
查看次数

如何使用参数创建AttributeSyntax

我正在尝试使用Roslyn创建一个看起来像这样的参数:

[MyAttribute("some_param")]

现在我可以轻松创建AttributeSyntax但无法弄清楚如何ArgumentList使用该.AddArguments(ExpressionSyntax)方法向porperty 添加参数.我只是不确定我需要做什么才能创建合适的表达式.

c# roslyn roslyn-code-analysis

9
推荐指数
1
解决办法
1019
查看次数

使用新的csproj格式将文件放入nupkg中的"analyzer"目录中

我正在使用新的.csproj文件格式来打包NuGet包,而不使用.nuspec文件.

问题是,它将我的dll放在\ lib \中我需要把它放在\ analyzers \

我是谁做到的?

csproj nuget roslyn-code-analysis

9
推荐指数
1
解决办法
160
查看次数

解决 NuGet 版本冲突

我正在尝试通过 NuGet 安装更新:

Microsoft.AspNetCore.Mvc 1.1.2 --> 2.0.4
Run Code Online (Sandbox Code Playgroud)

但是,更新永远不会成功,因为在遇到以下冲突后会回滚:

Version conflict detected for Microsoft.CodeAnalysis.CSharp. Reference the package directly from the project to resolve this issue.


Web -> Microsoft.AspNetCore.Mvc 2.0.4 -> Microsoft.AspNetCore.Mvc.RazorPages 2.0.4 -> 
Microsoft.AspNetCore.Mvc.Razor 2.0.4 -> Microsoft.CodeAnalysis.CSharp (>= 2.3.1) 

Web -> Microsoft.VisualStudio.Web.CodeGeneration.Design 1.1.0 -> 
Microsoft.VisualStudio.Web.CodeGeneration.Utils 1.1.0 ->
 Microsoft.CodeAnalysis.CSharp.Workspaces 1.3.0 -> 
Microsoft.CodeAnalysis.CSharp (= 1.3.0).
Run Code Online (Sandbox Code Playgroud)

因此,据我了解,Microsoft.CodeAnalysis.CSharp罪魁祸首是因为Microsoft.AspNetCore.Mvc具有至少要求它的依赖项v2.3.1,同时Microsoft.VisualStudio.Web.CodeGeneration.Design也具有要求它的依赖项v1.3.0

我不知道如何解决这个问题。它确实说了Reference the package directly from the project to resolve this issue,但我不太明白这意味着什么以及如何做到这一点。

c# dependencies nuget roslyn-code-analysis

9
推荐指数
1
解决办法
1万
查看次数

在VS 2015中从命令行运行代码分析工具

我想从命令行运行VS 2015提供的代码分析工具,就像我能够生成FxCop报告一样,如下所示:

FxCopCmd.exe /console /project *Project* /out:*ReportFile*
Run Code Online (Sandbox Code Playgroud)

请注意,我不想使用FxCop工具,而是想启动代码分析工具来生成报告,类似于我选择时生成的报告:

分析 - >运行代码分析解决方案

知道如何实现这一点吗?

更新: 经过一些研究,我发现运行代码分析实际上执行位于的FxCopCmd.exeC:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\FxCop\FxCopCmd.exe

code-analysis visual-studio-2015 roslyn-code-analysis

8
推荐指数
1
解决办法
5376
查看次数

什么可以替代Visual Studio 2019中的代码分析?

我想让我们的团队和项目为VS 2019做好准备。马上,尝试为一个新项目设置Code Analysis,我发现:

在此处输入图片说明

因此,如果不推荐使用(显然甚至无法使用它,那么我认为“不推荐使用”的意思是“消失了”),我们应该在哪里设置规则集?在样式和代码质量问题上是否还有其他位置,或者是全新的解决方案?

fxcop visual-studio roslyn roslyn-code-analysis visual-studio-2019

8
推荐指数
1
解决办法
4430
查看次数

VS 2019 - 从 Microsoft.CodeAnalysis.CSharp.Analyzers 看到许多警告 AD0001

Error List在 VS 2019 (v16.4.2)的窗格中多次收到此确切警告。

我该如何解决警告?

AD0001 Analyzer 'Microsoft.CodeAnalysis.CSharp.Analyzers.FixAnalyzers.CSharpFixerWithFixAllAnalyzer' threw an exception of type 'System.TypeInitializationException
Run Code Online (Sandbox Code Playgroud)

visual-studio roslyn-code-analysis

8
推荐指数
1
解决办法
1748
查看次数