繁体   English   中英

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

[英]Making a solution file without using visual studio

我正在构建一个程序,该程序会生成很多代码文件(cpp,h,hpp文件)。 使用“生成”按钮触发新文件的制作,我想添加其他功能,我还希望在通过正确的设置生成文件后,“生成”按钮可以制作出供视觉工作室使用的Sulotion(适用于Visual Studio),因此用户将不必处理它。 因此,用户单击“生成”,将生成新文件,并且他还可以在Visual Studio中打开整个项目,并以正确的顺序进行固定。

我怎样才能做到这一点?

您可以从自定义Visual Studio Project System示例中摘取叶子,并使用Microsoft.Build.dll程序集的Microsoft.Build.Construction命名空间。

MSDN:

Microsoft.Build命名空间包含提供对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);

模板

编辑 :在下面的评论中对此建议表示感谢毫微粉 :)

如果要加载“模板”项目文件以用作新项目的基础,则可能需要查看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);
}

告诉我更多

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM