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