nitrous_007 Ответов: 1

Расширение Visual studio не может получить имя outputfilename / targetfile из ENVDTE.DTE VSIX для проекта C++


Привет,
i am writing a Visual Studio Extension and I need to get the OutputFileName or TargetFileName for C++ projects in the solution. For example in a sample solution this OutputFileName or TargetFileName would be ConsoleApplication.dll(note that its case sensitive). I wrote some code as shown below to achieve this but my code is crashing in the lines below. The only line that works is when i try to get Output Path. OutputFileName crashes in both cases as shown in code below. I also tried to cast it to a VCProject using Microsoft.VisualStudio.VCProjectEngine using the external dll but I dont know how to get the OutputFileName or TargetFileName nor do I not know if its going to work.

Примеры в интернете показывают, что ниже должно работать. Однако это не работает. Как я уже сказал, OutputPath работает. Это потому, что это неуправляемый Проект C++, и я должен получить путь, используя какой-то другой способ? Я могу подтвердить, что проекты, с которыми я работаю, являются действительными неуправляемыми проектами C++.

EnvDTE.DTE dte2 = Package.GetGlobalService(typeof(DTE)) as DTE;
          Projects projects2 = dte2.Solution.Projects;
string outputPath = projects2 [0].ConfigurationManager.ActiveConfiguration.Properties.Item("OutputPath").Value.ToString(); //This works
        string outputFileName = projects2 [0].ConfigurationManager.ActiveConfiguration.Properties.Item("OutputFileName").Value.ToString(); //This crashes

       string outputFileName = list[0].Properties.Item("OutputFileName").Value.ToString();//This crashes


Что я уже пробовал:

string outputFileName = projects2 [0].ConfigurationManager.ActiveConfiguration.Properties.Item("OutputFileName").Value.ToString(); //This crashes

 string outputFileName = list[0].Properties.Item("OutputFileName").Value.ToString();//This crashes

VCProject vcproject = list[0].Object as VCProject;//How to use this?

1 Ответов

Рейтинг:
10

nitrous_007

Я нашел решение. Мне действительно нужна была Microsoft.VisualStudio.VCProjectEngine DLL, которая является каталогом Visual Studio для работы с неуправляемым кодом, а затем написать некоторый код для доступа к листам свойств.

Подсказки были получены из нижеприведенных ссылок:

envdte - как программно перебирать все проекты решения Visual Studio 2008 с учетом папок решений - переполнение стека[^]

Как читать/писать новые свойства проекта Visual C++ | блог Visual Studio[^]


[Справочник По Visual Studio]