Получить текущий каталог проекта из экспериментального экземпляра Visual Studio 2010? - PullRequest
0 голосов
/ 09 июня 2011

В настоящее время я выполняю проверку uml http://msdn.microsoft.com/en-us/library/ee329482.aspx,

Когда я отлаживаю, он открывает новый экспериментальный экземпляр Visual Studio для проверки uml-диаграмм.

Есть ли способ получить путь к каталогу проекта, выбранному пользователем, когда работает экспериментальный экземпляр visual studio ??

Чтобы быть более понятным ,

проект A - содержит компоненты VSIX и библиотеки классов для проверки валидации uml. Эти компоненты библиотеки классов добавляются в VSIX как компоненты MEF

когда я отлаживаю Проект A -> откроется новый экспериментальный экземпляр VS-> Затем создайте новый проект (ctrl + shift + N) -> выберите проект моделирования -> перейдите в каталог (чтобы сохранить проект моделирования) - > Назовите проект как «MYMODEL» -> затем нажмите OK

Теперь, в моем проекте A мне нужен путь MYMODEL. Подскажите, пожалуйста, как мне получить этот путь?

Заранее спасибо,

1 Ответ

0 голосов
/ 15 июня 2011

Это немного окольный, но работает.Вам нужны ссылки на EnvDTE и Microsoft.VisualStudio.Shell.Immutable.10.0, а также обычные биты.

using System.ComponentModel.Composition;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml;
using Microsoft.VisualStudio.Modeling.Validation;
using Microsoft.VisualStudio.Uml.AuxiliaryConstructs;

namespace Validation
{
  public class MyValidationExtensions
  {
    [Import]
    public Microsoft.VisualStudio.Shell.SVsServiceProvider ServiceProvider { get; set; }

    [Export(typeof(System.Action<ValidationContext, object>))]
    [ValidationMethod(
     ValidationCategories.Open
     | ValidationCategories.Menu)]
    public void ValidateClassNames
      (ValidationContext context,
      // This type determines what elements 
      // will be validated by this method:
       IModel elementToValidate)
    {
      IModelStore store = elementToValidate.GetModelStore();
      EnvDTE.DTE dte = ServiceProvider.GetService(typeof(EnvDTE.DTE)) as EnvDTE.DTE;
      //dynamic projects = dte.ActiveSolutionProjects;

      foreach (EnvDTE.Project project in dte.Solution.Projects)
      {
        IModelingProject mp = project as IModelingProject;
        if (mp.Store == store)
        {
          System.Windows.Forms.MessageBox.Show(project.FullName);
        }
      }

    }
    // Add more validation methods for different element types.
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...