2

使用 Visual Studio 可扩展性 SDK 时,我有一个ProjectItem. 我正在尝试从该项目中获取文本,以便可以对其进行一些替换。我看到这样做的方式是使用DTE2.ActiveDocument.Selection. 但是,这DTE2.ActiveDocument不是我需要的文档,所以我不能使用它。当我尝试访问ProjectItem.Document包含Selection属性的对象时,文档始终为空,并且出现空引用异常。我还尝试了以下不起作用的方法(即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 实例?

4

1 回答 1

2

像往常一样处理 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);

有没有更好的办法?

于 2012-12-05T12:27:53.203 回答