【问题标题】:VSIX roslyn debugging, extremely odd behaviourVSIX roslyn 调试,极其奇怪的行为
【发布时间】:2018-03-08 06:05:25
【问题描述】:

我一直在尝试使用 vs extensions 和 roslyn,尽管我似乎很早就遇到了障碍。我正在尝试检测文件何时保存,然后对其进行分析以找到某些基类、属性等。

目前我的包中有以下代码,成功获取了保存文件的内容:

protected override void Initialize()
{
    base.Initialize();
    SetupEvents();
}

private DTE _dte;
private Events _dteEvents;
private DocumentEvents _dteDocEvents;

private void SetupEvents()
{
    _dte = (DTE)GetService(typeof(SDTE));
    _dteEvents = _dte.Events;
    _dteDocEvents = _dteEvents.DocumentEvents;
    _dteDocEvents.DocumentSaved += _dteDocEvents_DocumentSaved;
}


private void _dteDocEvents_DocumentSaved(Document document)
{
    string text = document.GetDocumentText();
    //var syntaxTree = Microsoft.CodeAnalysis.CSharp.CSharpSyntaxTree.ParseText(text);
}

我的 _dteDocEvents_DocumentSaved 处理程序的第一行有一个断点,我可以看到代码正在被命中。但是,如果我只是取消注释 syntaxTree 声明行,我的处理程序突然不再被调用。这种行为对我来说完全没有意义,我的处理程序中的额外代码行如何阻止处理程序被调用?

有人对这里可能发生的事情有任何可能的建议吗?

谢谢

詹姆斯

【问题讨论】:

  • 对已处理的异常启用 Break 并查看是否发生任何事情。
  • @SLaks 我得到了 Newtonsoft json 类型的 AdalSilentTokenAcquisitionExceptions 和 RuntimeBinderExceptions 的负载,尽管当它成功调试时我得到了这些。不过,这似乎确实是一个调试问题,因为包含那行代码意味着我什至无法使用 Debug.WriteLine 写入输出窗口
  • 你可以忽略其中的大部分。
  • 我设法发现这是 Microsoft.CodeAnalysis.CSharp 加载的问题,我在这里发现了另一个问题 stackoverflow.com/questions/42536506/… 我目前正在更新,看看是否能解决问题
  • 听起来您是在引用不同版本的 Roslyn 或将其设置为 Copy Local。

标签: c# debugging roslyn vs-extensibility


【解决方案1】:

问题是 Microsoft.CodeAnalysis.CSharp 无法加载。为了解决这个问题,我不得不更新到最新版本的 Visual Studio

【讨论】:

    猜你喜欢
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多