Daniel -
从编辑器获取项目是一个多步骤的过程。首先,您在编辑器中获取文件的文件名,从那里您可以找到包含的项目。
假设你有一个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;
}
从项目你可以得到的代码模型,我假设的参考,但我不需要那样做。
希望这有助于...
〜卡梅伦
谢谢!要获取参考,您需要获取VSProject对象。您可以将Project.Object强制转换为VSProject:if(project.Object is VSProject){var vsProject =(VSProject)project.Object;/* ... * /} –
如果有人为满足这些参考需求而奋斗: 在Visual Studio 2015中,我不得不添加一个对'Microsoft.VisualStudio.Text.Logic'的引用来使文件名查找工作( 'TextDataModel.DocumentBuffer')。 我还必须添加一个对'EnvDTE'和'EnvDTE80'的引用来使项目查找工作('DTE2'和'Project')。 – Spiralis