C# 不使用visual studio生成解决方案文件
我正在构建一个程序,该程序生成许多代码文件(cpp、h、hpp文件)。 使用“生成”按钮触发新文件的生成,我想添加另一个功能,我还希望“生成”按钮在生成具有正确设置的文件后生成一个sulotion(对于visual studio),这样用户就不必处理它了。 因此,用户单击“生成”,生成新文件,他也可以在VisualStudio中打开整个项目,并按正确的顺序进行修复C# 不使用visual studio生成解决方案文件,c#,winforms,visual-studio,solution,C#,Winforms,Visual Studio,Solution,我正在构建一个程序,该程序生成许多代码文件(cpp、h、hpp文件)。 使用“生成”按钮触发新文件的生成,我想添加另一个功能,我还希望“生成”按钮在生成具有正确设置的文件后生成一个sulotion(对于visual studio),这样用户就不必处理它了。 因此,用户单击“生成”,生成新文件,他也可以在VisualStudio中打开整个项目,并按正确的顺序进行修复 我该怎么做 您可以借鉴自定义Visual Studio项目系统示例,并使用Microsoft.Build.dll程序集的Micros
我该怎么做 您可以借鉴自定义Visual Studio项目系统示例,并使用Microsoft.Build.dll程序集的Microsoft.Build.Construction命名空间 MSDN: Microsoft.Build命名空间包含提供对MSBuild引擎的编程访问和控制的类型 是用于以编程方式向中添加文件和创建解决方案的主类 表示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}
}
);
模板
编辑:在下面的评论中对这一建议表示感谢:)
如果要加载一个“模板”项目文件以用作新项目的基础,您可能需要查看ProjectRootElement.TryOpen()
。它将返回一个ProjectRootElement
,您也可以使用该元素修改和/或添加新项目,并将结果保存为新项目
e、 g
告诉我更多
- 您可以在中看到如何以编程方式生成解决方案文件的完整工作示例
project.Save(writer);
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);
}