Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Roslyn CodeFixProvider给出VS 2015错误_C#_Visual Studio 2015_Roslyn - Fatal编程技术网

C# Roslyn CodeFixProvider给出VS 2015错误

C# Roslyn CodeFixProvider给出VS 2015错误,c#,visual-studio-2015,roslyn,C#,Visual Studio 2015,Roslyn,我创建了一个roslyn CodeAnalyzer和一个CodeFixProvider 分析器运行正常,并创建了规则,但是当我试图打开显示修复的弹出窗口时,我得到一个“发生了一个或多个错误”VS popup 我第一次运行它时,它工作得很好,但后来我停止了调试,之后它给了我那个错误,所以我在另一台计算机上尝试,第一次调试时它又工作得很好 我的分析器: private static void Analyze(SyntaxNodeAnalysisContext context) { var l

我创建了一个roslyn CodeAnalyzer和一个CodeFixProvider

分析器运行正常,并创建了规则,但是当我试图打开显示修复的弹出窗口时,我得到一个“发生了一个或多个错误”VS popup

我第一次运行它时,它工作得很好,但后来我停止了调试,之后它给了我那个错误,所以我在另一台计算机上尝试,第一次调试时它又工作得很好

我的分析器:

private static void Analyze(SyntaxNodeAnalysisContext context)
{
    var localDeclaration = (LocalDeclarationStatementSyntax)context.Node;

    foreach (var variable in localDeclaration.Declaration.Variables)
    {
        var initializer = variable.Initializer;
        if (initializer == null) return;
    }

    var node = context.Node;

    while (node.Kind() != SyntaxKind.MethodDeclaration)
    {
        node = node.Parent;
    }

    var method = (MethodDeclarationSyntax)node;

    if (method.AttributeLists.Any(x => x.Attributes.Any(y => y.Name is IdentifierNameSyntax && ((IdentifierNameSyntax)y.Name).Identifier.Text.ToLower().Contains("test"))))
    {
        context.ReportDiagnostic(Diagnostic.Create(Rule, context.Node.GetLocation()));
    }
}
我的代码修复提供者

private async Task<Document> AddAssertionsAsync(Document document, LocalDeclarationStatementSyntax localDeclaration, CancellationToken cancellationToken)
{
    var editor = await DocumentEditor.CreateAsync(document, cancellationToken);

    var assert = SyntaxFactory.IdentifierName("Assert");
    var areEqual = SyntaxFactory.IdentifierName("AreEqual");

    var memberAccess = SyntaxFactory.MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, assert,
            areEqual);

    var firstArgument = SyntaxFactory.Argument(SyntaxFactory.LiteralExpression(SyntaxKind.StringLiteralExpression, SyntaxFactory.Literal(@"")));
    var secondArgument = SyntaxFactory.Argument(SyntaxFactory.LiteralExpression(SyntaxKind.StringLiteralExpression, SyntaxFactory.Literal(@"")));

    var argumentList = SyntaxFactory.SeparatedList<ArgumentSyntax>(
        new SyntaxNodeOrToken[] {
            firstArgument,
            SyntaxFactory.Token(SyntaxKind.CommaToken),
            secondArgument
        });

    var assertToken =
        SyntaxFactory.ExpressionStatement(
        SyntaxFactory.InvocationExpression(memberAccess,
        SyntaxFactory.ArgumentList(argumentList)));

    editor.InsertAfter(localDeclaration, assertToken);
    var newDocument = editor.GetChangedDocument();

    return newDocument;
}
变成

[Test]
public void blah()
{
    var stat = string.Empty;
    Assert.AreEqual("", "");
}

按ctrl+时。关于“统计”。。。正是在这里,VS2015给出了错误,只是不是第一次…

不确定出了什么问题,因为它只是在调试中失败了。在调试中运行时看起来像一个VS错误,我不知道为什么,但我发现删除
%localappdata%\Microsoft\VisualStudio\14.0Exp
文件夹会有所帮助。

我也遇到过这种情况。 我试图在其他论坛上找到答案,但运气不好。 我的解决方法是增加vsixminifest版本号

希望能有帮助。 谢谢
Wilsade

这意味着您的代码修复中可能存在问题。使用调试器逐步检查它,您会发现它在某处抛出异常。使用调试器查找实际异常。异常消息显示“无法将类型为'System.Reflection.RuntimeMethodInfo'的对象强制转换为类型为'System.Reflection.ConstructorInfo'不确定演员阵容是在哪里制作的,但在VS 2017 RC中,我也遇到了同样的问题。但本例中的路径不同:
C:\Users\Maxim\AppData\Local\Microsoft\VisualStudio\15.0\u 10df9108Roslyn
[Test]
public void blah()
{
    var stat = string.Empty;
    Assert.AreEqual("", "");
}