C# &引用;“带代码修复的分析器”;项目模板已损坏
简短问题:如何在Visual Studio 2019 v16.6.2中使用工作单元测试项目设置roslyn代码分析器项目 几个月前(以及一些VisualStudio更新),我尝试使用“analyzer with code Fix(.NET Standard)”项目模板设置代码分析器项目。它运行良好,正如所有可用的how-to中记录的那样 今天(VS2019 v16.6.2),我想开始一个真正的analyzer项目,但不幸的是,更新后的模板似乎被破坏了,或者发布时有很多未完成的工作正在进行中。(一个小问题是,包管理器突然似乎无法恢复包,因为它不喜欢使用与analyzer项目相同的程序集名称的vsix项目。) 该模板包含一个单元测试项目。在我试验的早期版本中,这个测试项目包含了大量代码,这些代码就像一个测试基础设施,使开发人员能够轻松地根据真实代码测试分析器 所有这些代码现在似乎都集成在许多特定于语言的nuget包中。但是这些包裹C# &引用;“带代码修复的分析器”;项目模板已损坏,c#,unit-testing,visual-studio-2019,roslyn-code-analysis,C#,Unit Testing,Visual Studio 2019,Roslyn Code Analysis,简短问题:如何在Visual Studio 2019 v16.6.2中使用工作单元测试项目设置roslyn代码分析器项目 几个月前(以及一些VisualStudio更新),我尝试使用“analyzer with code Fix(.NET Standard)”项目模板设置代码分析器项目。它运行良好,正如所有可用的how-to中记录的那样 今天(VS2019 v16.6.2),我想开始一个真正的analyzer项目,但不幸的是,更新后的模板似乎被破坏了,或者发布时有很多未完成的工作正在进行中。(一
- 不再在中托管,而是在中托管
- 它们都是预发布版本和
- 它们不包含预期的类/代码
- 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 = @"";
await Verify.VerifyCSharpDiagnosticAsync(test);
}
//...
说明发现了一个诊断,但没有预期的诊断(这显然是错误的,测试显然需要诊断)
因此,问题仍然存在:如何修复此测试项目?我最近遇到了相同的问题。 感谢您提及更改的nuget URL。 在VS设置中更改后,我可以通过删除
.CodeFix
部分来编译项目
使用Verify=Microsoft.codesanalysis.CSharp.CodeFix.Testing.MSTest.CodeFix验证器<
分析器1.分析器1分析器,
Analyzer1.Analyzer1CodeFixProvider>;
然后,在第一个单元测试中将verifycsharpdiagnosticsync
替换为VerifyAnalyzerAsync
,在第二个单元测试中将verifycsharpfixancync
替换为verifycodefixancync
不幸的是,其中一个单元测试尚未运行。我将非常感谢您对这个问题的帮助。我发现了两个带有工作单元测试的存储库:
Initialize
方法中:
context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
长版本
花了一些时间调试库。罪魁祸首似乎是将您的预期诊断消息声明为排除主题,并将其从预期结果列表中丢弃,从而由于实际(1)和预期(现在为0)诊断之间的不匹配而导致测试失败。即将提交问题,但决定检查是否已经存在类似的问题,事实上,它指向了另一个长线程
顺便说一下,project提供了更多的使用示例。Microsoft Visual Studio Community 2019 16.8.3的快速更新 经过以下修改后,模板现在可以工作:
- 使用“Analyzer with Code Fix”初始化新解决方案
- 在解决方案的根目录中添加一个NuGet.Config文件,即运行以下命令:
dotnet new nugetconfig
- 修改NugetConfig文件以添加roslyn analyzers MyGet提要,如下所示:
- 关闭visual studio,删除解决方案目录中的
文件夹.vs
- 运行nuget还原并构建它现在应该可以工作了
- 可以选择在Package manager控制台中运行
,以便将所有包更新为最新版本Get Project-all | Update Package
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!-- Only specify feed for Arcade SDK (see https://github.com/Microsoft/msbuild/issues/2982) -->
<packageSources>
<clear />
<add key="dotnet5" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json" />
<add key="dotnet-eng" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json" />
<add key="dotnet-tools" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
</packageSources>
<disabledPackageSources>
<clear />
</disabledPackageSources>
</configuration>
您是否尝试在Visual Studio安装程序中重新安装“.NET编译器平台SDK”?@XingyuZhao我几个月前安装了这些组件。如果您确信这确实可以工作,我可以卸载并重新安装它们。但是我不明白为什么这会有帮助,因为相关的代码肯定应该在包中,而不是在sdk中,并且没有理由破坏安装。如果安装完美,你确定它会工作吗?roslyn analyzers提要似乎不再存在…似乎现在它位于以下提要之一上:,,我想这是朝着正确方向迈出的一步,但是是的:第二次测试现在失败了,可能是因为它不是csharp代码修复的正确验证器,所以我会等一会儿
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!-- Only specify feed for Arcade SDK (see https://github.com/Microsoft/msbuild/issues/2982) -->
<packageSources>
<clear />
<add key="dotnet5" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json" />
<add key="dotnet-eng" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json" />
<add key="dotnet-tools" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
</packageSources>
<disabledPackageSources>
<clear />
</disabledPackageSources>
</configuration>