Я разрабатываю собственный инструмент для Visual Studio. Инструмент присваивается файлу, в момент изменения файла я получаю имя этого файла и должен генерировать некоторые изменения в проекте. Мне нужно найти ProjectItem по имени полученного файла. Я нашел только одно решение, которое перечисляет все элементы проекта в каждом проекте решения. Но это кажется огромным решением. Есть ли способ получить объект проекта по имени файла без перечисления?
Это моя реализация метода Generate для IVsSingleFileGenerator
public int Generate(string sourceFilePath, string sourceFileContent, string defaultNamespace, IntPtr[] outputFileContents, out uint output, IVsGeneratorProgress generateProgress)
{
var dte = (EnvDTE.DTE)Package.GetGlobalService(typeof(EnvDTE.DTE));
ProjectItem projectItem = null;
foreach (Project project in dte.Solution.Projects)
{
foreach (ProjectItem item in project.ProjectItems)
{
var path = item.Properties.Item("FullPath").Value;
if (sourceFilePath.Equals(path, StringComparison.OrdinalIgnoreCase))
{
projectItem = item;
}
}
}
output = 0;
outputFileContents[0] = IntPtr.Zero;
return Microsoft.VisualStudio.VSConstants.S_OK;
}