2

我想知道如何使用Empty Visual C++项目的模板以编程方式用这个空项目创建一个新的解决方案。代码(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)所在的位置。当我通过IDE手动创建一个新项目时,VC++空项目模板确实出现在已安装的模板中。 soln.GetProjectTemplate()应该是什么参数?它似乎不承认"VC++"作为一种语言。我知道"CSharp""VisualBasic"是有效的选项。但我想要一个VC++空项目。任何帮助将不胜感激。

+0

仅仅创建一个空的VC++项目并将其用作模板就足够了吗? – AVIDeveloper 2012-02-17 21:00:25

+0

我正在考虑这个,但从目前为止我收集的内容来看,模板应该是ZIP格式。打开空项目后,我尝试使用“导出模板”功能,但它被禁用。我不确定如何获取包含必要文件的ZIP作为模板。我也不明白的是:项目文件中的所有GUID发生了什么?他们是否为新项目重新生成? – 2012-02-17 21:55:33

+1

我也找不到一个准备好的VC++模板。但我的建议是自己动手做。即:创建一个空的VC++项目,并根据需要进行设置;保存;在文本编辑器中打开;为您想要生成的任何数据添加占位符(例如#GUID#,#CPP_FILES#等)。现在这是你自己的VC++模板。当你想创建一个新项目时,从你的C#代码中打开你的模板文件,用适当的数据替换占位符,你就完成了。 – AVIDeveloper 2012-02-17 22:17:57

回答

3

我发布这个答案,希望它可以帮助某人面对同样的问题,我正面临着。

显然Visual Studio可扩展性框架API不提供以编程方式创建空的Visual C++项目的选项。我不得不生成解决方案和项目文件来实现这一点。具体而言,必须生成[solution_name].sln,[project_name].vcxproj[project_name].vcxproj.filters文件。必须为新项目生成一个GUID并插入适当的位置。如果需要将文件添加到此空项目,则需要为头文件生成ClInclude标记,并为源文件标记ClCompile标记。这些标签被添加到[project_name].vcxproj[project_name].vcxproj.filters文件中。请参阅现有的Visual C++项目文件,以帮助您找出所处的位置。这非常简单。


UPDATE

出于某种原因,在VC++的解决方案产生这种方式并不直接打开(通过双击Windows资源管理器解决方案文件)。我必须启动Visual Studio并从那里打开解决方案。

+1

您的解决方案非常丰富。我会从那里开始。非常感谢! – smwikipedia 2015-09-25 16:12:32

+1

这是我的解决方案:http://stackoverflow.com/questions/32785764/how-to-programmatically-create-a-vc-project-with-c – smwikipedia 2015-09-29 05:03:08

+1

@smwikipedia我没有直接操纵XML。我像你一样使用模板,并使用正则表达式替换(因为替换字符串不符合我的需要)。我忽略了细节,因为对于不同的项目需求,细节可能会有所不同。但是,您在解决方案中包含更多详细信息真是太好了。谢谢。 – 2015-10-01 16:41:04

相关问题