在不使用visual studio的情况下制作解决方案文件



我正在构建一个生成大量代码文件(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中看到如何以编程方式生成解决方案文件的完整工作示例。

相关内容

  • 没有找到相关文章

最新更新