我正在构建一个生成大量代码文件(cpp,h,hpp文件)的程序。使用"生成"按钮触发新文件的制作,我想添加另一个功能,我也希望"生成"按钮使解决方案(为visual studio)后,它完成生成文件与正确的设置,所以用户不必处理它。因此,用户点击"生成",生成新的文件,他也可以打开整个项目在visual studio中,固定在正确的顺序。
我该怎么做呢?
您可以参考自定义的Visual Studio Project System示例,并使用Microsoft.Build。Microsoft.Build.dll程序集的构造命名空间。
MSDN:
微软。构建名称空间包含提供对MSBuild引擎的编程访问和控制的类型。
ProjectRootElement是主要的类,用于添加文件,并以编程方式创建解决方案。
表示MSBuild项目、目标文件或符合MSBuild项目文件架构的任何其他文件。该类及其相关类允许读取和写入完整的MSBuild项目或目标文件。告诉我更多…
例如,要开始您的解决方案,您可以:
var project = ProjectRootElement.Create();
project.DefaultTargets = "Build";
project.ToolsVersion = "4.0";
…要添加文件,您可以这样做:
foreach (var unescapedFile in allFiles)
{
var file = ProjectCollection.Escape(unescapedFile);
var ext = Path.GetExtension(file);
var fileType = "Content";
folders.Add(Path.GetDirectoryName(file));
var item = project.AddItem(fileType, file);
.
.
.
}
…使用:
完成解决方案var imports = project.AddPropertyGroup();
imports.AddProperty("VisualStudioVersion", "10.0")
.Condition = " '$(VisualStudioVersion)' == '' ";
(customization ?? DefaultProjectCustomization.Instance).Process(
project,
new Dictionary<string, ProjectPropertyGroupElement>
{
{"Globals", globals},
{"Imports", imports},
{"Debug", debugGroup},
{"Release", releaseGroup}
}
);
…最后将解决方案保存为XML格式:
project.Save(writer);
模板编辑:为下面评论中的建议向millimoose致敬:)
如果你想加载一个"模板"项目文件,作为新项目的基础,你可能想看看ProjectRootElement.TryOpen()
。它将返回一个ProjectRootElement
,您可以使用它来修改和/或添加新项目,并将结果保存为新项目。
。
using (var writer = new StreamWriter("NewProject.csproj", false, Encoding.UTF8))
{
var project = ProjectRootElement.TryOpen("my template.csproj");
project.AddItem("Content", "miss piggy.png");
project.Save(writer);
}
告诉我更多
- 您可以在Microsoft's Python Tools for Visual Studio中看到如何以编程方式生成解决方案文件的完整工作示例。