Visual Studio可扩展性 - ProjectInfo.Document始终为null

时间:2012-12-04 16:32:57

标签: c# visual-studio-2012 visual-studio-extensions visual-studio-sdk

使用Visual Studio扩展性SDK时,我有一个ProjectItem的实例。我正试图从这个项目中获取文本,以便我可以对其进行一些替换。我看到这样做的方式是使用DTE2.ActiveDocument.Selection上的属性。但是,DTE2.ActiveDocument不是我需要的文档,所以我不能使用它。当我尝试访问包含Selection属性的ProjectItem.Document对象时,文档始终为null,并且我得到一个空引用异常。我也尝试了以下不起作用(即Document有效,但Selection属性为空):

Document document = null;
if (!projectItem.IsOpen)
    document = projectItem.Open().Document;

我尝试了以下但是它没有给我正确的文档,因为我正在处理的ProjectItem不是活动文档。有没有办法实现类似于以下使用ProjectItem.Document的代码?

TextSelection selection = DTE2.ActiveDocument.Selection;
selection.SelectAll();
string text = selection.Text;
selection.Delete();
//Do replacements
selection.Insert(text);

总结一下,如何从ProjectItem实例获取TextSelection实例?

1 个答案:

答案 0 :(得分:1)

与处理VS SDK一样,答案有点模糊。我解决它的方式(对或错)是使ProjectItem实例成为活动文档,然后使用DTE2.ActiveDocument.Selection属性来获取文本。这可以通过以下方式完成:

if (!projectItem.IsOpen)
    projectItem.Open(@"{7651A701-06E5-11D1-8EBD-00A0C90F26EA}").Document.Activate(); //EnvDTE.Constants.vsViewKindCode

TextSelection selection = _vsApp.ActiveDocument.Selection;
selection.SelectAll();
string text = selection.Text;
selection.Delete();
//Do replacements
text = ReplaceTemplateValues(text, replacements);
selection.Insert(text);

有更好的方法吗?