我正在创建一个简单的 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)
我检查了以下内容:
Microsoft.CodeAnalysis.CSharp生成器项目中的和Microsoft.CodeAnalysis.Analyzers都是最新的为什么它不起作用?
简短问题:如何在 Visual Studio 2019 v16.6.2 中使用工作单元测试项目设置 roslyn 代码分析器项目?
几个月前(以及一些 Visual Studio 更新),我尝试使用“Analyzer with Code Fix (.NET Standard)”项目模板设置代码分析器项目。它运行良好,并且正如所有可用的操作方法中所记录的那样。
今天(VS2019 v16.6.2)我想开始一个真正的分析器项目,但不幸的是更新的模板似乎已损坏或发布,还有很多未完成的工作正在进行中。(一个小问题是包管理器突然似乎无法恢复包,因为它不喜欢使用与分析器项目相同的程序集名称的 vsix 项目。)
该模板包含一个单元测试项目。在我试验的早期版本中,这个测试项目包含大量代码,这些代码充当测试基础设施,使开发人员可以轻松地针对真实代码测试分析器。
所有这些代码现在似乎都集成在许多特定于语言的 nuget 包中。但是这些包
这些是显然需要的包引用(省略测试框架包):
这是示例单元测试代码:
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) 我们的组织使用包含我们组织的 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
我喜欢将枚举映射到值的开关表达式 - 虽然不是最具可扩展性的解决方案,但如果枚举代表某种模式(并且不是很大),它会快速且相当干净。
错误的一个常见来源是向枚举添加成员 - 这通常会导致新情况得不到处理。
但我认为,如果我们能够为非详尽的开关提供编译错误,从而使遗漏变得易于可见和修复,那么这些错误几乎可以被消除。(默认情况必须省略,否则就没有意义了)
这可能吗?我在想这样的事情:
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),所以我认为这并不重要。
我正在尝试使用Roslyn创建一个看起来像这样的参数:
[MyAttribute("some_param")]
现在我可以轻松创建AttributeSyntax但无法弄清楚如何ArgumentList使用该.AddArguments(ExpressionSyntax)方法向porperty 添加参数.我只是不确定我需要做什么才能创建合适的表达式.
我正在使用新的.csproj文件格式来打包NuGet包,而不使用.nuspec文件.
问题是,它将我的dll放在\ lib \中我需要把它放在\ analyzers \
我是谁做到的?
我正在尝试通过 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,但我不太明白这意味着什么以及如何做到这一点。
我想从命令行运行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
我想让我们的团队和项目为VS 2019做好准备。马上,尝试为一个新项目设置Code Analysis,我发现:
因此,如果不推荐使用(显然甚至无法使用它,那么我认为“不推荐使用”的意思是“消失了”),我们应该在哪里设置规则集?在样式和代码质量问题上是否还有其他位置,或者是全新的解决方案?
fxcop visual-studio roslyn roslyn-code-analysis visual-studio-2019
我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)