Как создать пустой проект Visual C++ программно?

Я хотел знать, как использовать шаблон для пустого проекта Visual C++, чтобы программно создать новое решение с этим пустым проектом. Код (С#), который у меня есть сейчас:

string VSProgID = "VisualStudio.Solution.10.0";
Type solnObjType = System.Type.GetTypeFromProgID(VSProgID, true);
Solution4 soln = (Solution4) System.Activator.CreateInstance(solnObjType, true);
soln.Create(@"C:\NewSoln", "New");
soln.SaveAs(@"C:\NewSoln\New.sln");
string emptyVCProjPath = soln.GetProjectTemplate("General/Empty Project", "VC++"); // Here's where I need help
soln.AddFromTemplate(emptyVCProjPath, @"C:\NewSoln\NewProj", "New.vcxproj", false);

Мне не удалось найти шаблон пустого проекта VC++ там, где находятся все остальные шаблоны (C#/F#/VB). Пустой шаблон проекта VC++ появляется в установленных шаблонах, когда я создаю новый проект вручную через IDE. Какими должны быть параметры для soln.GetProjectTemplate()? Кажется, он не распознает "VC++" как язык. Я знаю, что "CSharp" и "VisualBasic" допустимы. Но я хотел пустой проект VC++. Любая помощь будет оценена.


person torrential coding    schedule 17.02.2012    source источник
comment
Разве не достаточно просто создать пустой проект VC++ и использовать его в качестве шаблона?   -  person AVIDeveloper    schedule 18.02.2012
comment
Я думал об этом, но из того, что я понял, шаблоны должны быть в формате ZIP. Открыв пустой проект, я пытаюсь использовать функцию экспорта шаблона, но она отключена. Я не знаю, как получить ZIP-архив, содержащий необходимые файлы для использования в качестве шаблона. Чего я также не понимаю: что происходит со всеми GUID в файлах проекта? Восстановлены ли они для нового проекта?   -  person torrential coding    schedule 18.02.2012
comment
Я также не смог найти готовый шаблон VC++. Но я предложил сделать это самостоятельно, вручную. А именно: Создайте пустой проект VC++ и настройте его по своему усмотрению; Сохрани это; открыть в текстовом редакторе; Поместите заполнители для любых данных, которые вы хотите сгенерировать (например, #GUID#, #CPP_FILES# и т. д.). Теперь ЭТО ВАШ собственный шаблон VC++. Когда вы хотите создать новый проект, откройте файл шаблона из кода C#, замените заполнители соответствующими данными, и все готово.   -  person AVIDeveloper    schedule 18.02.2012
comment
Спасибо, что подняли этот вопрос. Я тоже как-то обдумывал это. Что снова отвлекло меня от этого подхода, так это необходимость генерировать GUID и изменять любые другие параметры, которые необходимо изменить. И если это подход, который я должен в конечном итоге использовать, мне интересно, почему MS не позволяет использовать API-интерфейсы расширяемости VS для работы с шаблонами проектов VC++, как это делается для C#, F# и VB. Это было бы отстойно. Я все еще надеюсь, что есть способ использовать фреймворк вместо того, чтобы писать код для создания всех файлов проекта. Я подожду немного, чтобы увидеть, может ли кто-нибудь поделиться магией.   -  person torrential coding    schedule 18.02.2012
comment
Я предполагаю, что MS уделяет меньше внимания старому доброму C++. Тем не менее, возможно, где-то можно скачать шаблон VC++. В случае, если это не работает - тогда кодирование вручную не должно быть слишком сложным. Кстати, вы также можете просмотреть файл проекта шаблона как XML (например, с помощью XDocument). Замена GUID может стать раздражающей, поэтому в конечном итоге вы можете объединить оба метода. Удачи!   -  person AVIDeveloper    schedule 18.02.2012
comment
@AVIDeveloper Спасибо за подсказки!   -  person torrential coding    schedule 18.02.2012


Ответы (1)


Я публикую этот ответ в надежде, что он может помочь кому-то, кто столкнулся с той же проблемой, с которой столкнулся я.

По-видимому, API-интерфейс Visual Studio Extensibility framework не предоставляет возможность программно создать пустой проект Visual C++. Для этого мне пришлось создать решение и файлы проекта. В частности, необходимо было сгенерировать файлы [solution_name].sln, [project_name].vcxproj и [project_name].vcxproj.filters. Для нового проекта необходимо было сгенерировать GUID и вставить его в соответствующие места. Если нужно добавить файлы в этот пустой проект, необходимо сгенерировать теги ClInclude для файлов заголовков и теги ClCompile для исходных файлов. Эти теги добавляются в файлы [project_name].vcxproj и [project_name].vcxproj.filters. Обратитесь к файлам существующего проекта Visual C++, чтобы понять, что и куда нужно. Это довольно просто.


ОБНОВЛЕНИЕ

По какой-то причине сгенерированное таким образом решение VC++ не открывается напрямую (путем двойного щелчка файла решения в проводнике Windows). Мне нужно запустить Visual Studio и оттуда открыть решение.

person torrential coding    schedule 01.03.2012
comment
Ваше решение очень информативно. Я начну оттуда. Большое спасибо! - person smwikipedia; 25.09.2015
comment
Вот мое решение: stackoverflow.com/questions/32785764/ - person smwikipedia; 29.09.2015
comment
@smwikipedia Я не манипулировал XML напрямую. Я использовал шаблоны, как и вы, и замену регулярных выражений (потому что замена строки не соответствовала моим потребностям). Я не упомянул подробности, потому что более мелкие детали могут различаться для разных нужд проекта. Но здорово, что вы включили больше деталей в свое решение. Спасибо. - person torrential coding; 01.10.2015