【问题标题】:How can an Empty Visual C++ project be created programmatically?如何以编程方式创建一个空的 Visual C++ 项目?
【发布时间】:2012-02-17 18:16:20
【问题描述】:

我想知道如何使用空 Visual C++ 项目的模板以编程方式使用该空项目创建新解决方案。我现在的代码(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);

我无法在所有其他模板 (C#/F#/VB) 所在的位置找到 VC++ 空项目模板。当我通过 IDE 手动创建新项目时,VC++ 空项目模板确实出现在已安装的模板中。 soln.GetProjectTemplate() 的参数应该是什么?它似乎没有将"VC++" 识别为一种语言。我知道"CSharp""VisualBasic" 是有效选项。但我想要一个 VC++ 空项目。任何帮助将不胜感激。

【问题讨论】:

  • 仅仅创建一个空的 VC++ 项目并将其用作模板还不够吗?
  • 我正在考虑这一点,但从我目前收集到的信息来看,模板应该是 ZIP 格式的。打开空项目后,我尝试使用“导出模板”功能,但它被禁用。我不确定如何获取包含用作模板的必要文件的 ZIP。我也不明白的是:项目文件中的所有 GUID 会发生什么?它们是否为新项目重新生成?
  • 我也找不到现成的 VC++ 模板。但我的建议是自己手动完成。即:创建一个空的VC++工程,随意设置;保存;在文本编辑器中打开;为您想要生成的任何数据放置占位符(例如#GUID#、#CPP_FILES# 等)。现在这是您自己的 VC++ 模板。当你想创建一个新项目时,从你的 C# 代码打开你的模板文件,用适当的数据替换占位符,你就完成了。
  • 感谢您提出这个问题。我也碰巧考虑过这一点。这种方法再次让我分心的是必须生成 GUID,并更改需要更改的任何其他参数。如果这是我最终必须采用的方法,我想知道为什么 MS 不允许使用 VS 可扩展性 API 来处理 VC++ 项目模板,就像它在 C#、F# 和 VB 中所做的那样。这会很糟糕。我仍然希望有一种方法可以使用该框架,而不必编写代码来生成所有项目文件。我会稍等一下,看看是否有人可以分享一些魔法。
  • 我猜 MS 对老式 C++ 的关注越来越少。不过,也许有一个 VC++ 模板可以从某个地方下载。如果它不起作用 - 然后手动编码不应该太复杂。顺便说一句,您还可以将模板项目文件作为 XML 遍历(例如,使用 XDocument)。替换 GUID 可能会变得很烦人,因此您最终可能会结合使用这两种技术。祝你好运!

标签: visual-studio-2010 visual-c++-2010 visual-studio-extensions envdte


【解决方案1】:

我发布此答案是希望它可以帮助遇到与我相同的问题的人。

显然,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++ 项目的文件,以帮助您确定哪些内容在哪里。这很简单。


更新

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

【讨论】:

  • 您的解决方案信息量很大。我将从那里开始。非常感谢!
  • 这是我的解决方案:stackoverflow.com/questions/32785764/…
  • @smwikipedia 我没有直接操作 XML。我像你一样使用模板,并使用正则表达式替换(因为字符串替换不符合我的需要)。我省略了细节,因为更精细的细节可能会因不同的项目需求而有所不同。但是,很高兴您在解决方案中包含了更多细节。谢谢。
猜你喜欢
  • 2012-02-06
  • 2018-09-04
  • 2016-05-04
  • 1970-01-01
  • 2020-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多