【发布时间】: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