我正在使用 VS 2010 SDK RC 编写一个 Visual Studio 编辑器扩展。我希望能够弄清楚当前项目的引用是什么。如何访问与当前编辑器对应的项目?
关于编辑器扩展的文档似乎没有包含有关如何访问 Visual Studio 的非编辑器部分的信息。我做了一些搜索,看起来在 VS2008 中您可以编写可以访问项目系统的加载项,但我试图从 MEF 编辑器扩展中获得此功能。
我正在使用 VS 2010 SDK RC 编写一个 Visual Studio 编辑器扩展。我希望能够弄清楚当前项目的引用是什么。如何访问与当前编辑器对应的项目?
关于编辑器扩展的文档似乎没有包含有关如何访问 Visual Studio 的非编辑器部分的信息。我做了一些搜索,看起来在 VS2008 中您可以编写可以访问项目系统的加载项,但我试图从 MEF 编辑器扩展中获得此功能。
丹尼尔——
从编辑器到项目是一个多步骤的过程。首先,您在编辑器中获取文件的文件名,然后您可以从那里找到包含的项目。
假设你有一个 IWPFTextView,你可以得到这样的文件名:
public static string GetFilePath(Microsoft.VisualStudio.Text.Editor.IWpfTextView wpfTextView)
{
Microsoft.VisualStudio.Text.ITextDocument document;
if ((wpfTextView == null) ||
(!wpfTextView.TextDataModel.DocumentBuffer.Properties.TryGetProperty(typeof(Microsoft.VisualStudio.Text.ITextDocument), out document)))
return String.Empty;
// If we have no document, just ignore it.
if ((document == null) || (document.TextBuffer == null))
return String.Empty;
return document.FilePath;
}
一旦你有了一个文件名,你可以像这样得到它的父项目:
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Interop;
public static Project GetContainingProject(string fileName)
{
if (!String.IsNullOrEmpty(fileName))
{
var dte2 = (DTE2)Package.GetGlobalService(typeof(SDTE));
if (dte2 != null)
{
var prjItem = dte2.Solution.FindProjectItem(fileName);
if (prjItem != null)
return prjItem.ContainingProject;
}
}
return null;
}
从项目中你可以得到代码模型,我假设引用,但我还不需要这样做。
希望这可以帮助...
〜卡梅伦