Daniel -
Obtenir de l'éditeur au projet est un processus à plusieurs étapes. D'abord, vous obtenez le nom de fichier du fichier dans l'éditeur, et à partir de là vous pouvez trouver le projet contenant.
En supposant que vous avez un IWPFTextView, vous pouvez obtenir le nom de fichier comme ceci:
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;
}
Une fois que vous avez un nom de fichier, vous pouvez l'obtenir est le projet parent comme celui-ci:
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;
}
Depuis le projet, vous pouvez accéder au codemodel, et j'assume les références, mais je n'ai pas encore eu besoin de le faire.
Hope this helps ...
~ Cameron
Merci! Pour obtenir les références, vous devez obtenir un objet VSProject. Vous pouvez convertir le Project.Object en un VSProject: if (project.Object est VSProject) {var vsProject = (VSProject) project.Object;/* ... * /} –
Dans le cas où quelqu'un d'autre a du mal à satisfaire les exigences de référence pour ceux-ci: Dans Visual Studio 2015, j'ai dû ajouter une référence à 'Microsoft.VisualStudio.Text.Logic' pour que la recherche de nom de fichier fonctionne ('TextDataModel.DocumentBuffer'). J'ai aussi dû ajouter une référence à 'EnvDTE' et' EnvDTE80' pour que la recherche de projet fonctionne ('DTE2' et' Project'). – Spiralis