[英]Programmatically generate Visual Studio Solution
我想在.net中编写一个向导,该向导以编程方式生成一些项目的Visual Studio解决方案。 我将有一个XML文件,其中包含文件的详细信息,这些文件的详细信息需要包含在项目中,并带有它们各自的路径来获取它们以及项目名称列表。 有什么办法可以做到这一点
查看文本模板转换工具包(T4) 。 它非常好用,并为ASP.NET MVC中的某些文件生成提供了支持。 斯科特·汉瑟曼(Scott Hanselman) 撰写了一篇有关该主题的精彩介绍文章 。
那么Visual Studio SDK将是您的理想之路。 有一些方法可以创建文件,我想也可以基于项目模板进行项目。 因此,例如,您可以创建一个新的“ asp.net mvc”项目或一个类库。 您甚至可以创建自己的模板。
我很确定您只能在VS内执行此操作。
否则,生成项目并没有问题,并且sln文件将生成xml文件,这就是它们的最终目的是纯xml的一件好事。 您只需要生成一些Projected Guid,但是我认为这将非常简单并且完全“合法”。
进步不错!
您可以使用少量的代码或脚本来完成此操作。 Visual Studio将为您填充大多数GUID。
我一次性完成了这样的事情来整理项目。 它不是100%完美的,您最终可能会从代码处理项目名称的方式中得到重复。 希望它能为您指明道路。
我们在这里要做的是设置解决方案文件的序言,然后插入每个解决方案(您需要Project类型guid(在此处以FAE开头,而不是Project自己的GUID,VS会在保存Solution文件时插入该GUID)。 还有更多样板,然后我们为每个项目插入构建配置。 对于每个项目,我大约有12种配置(不同的Release和Debug设置),但在这里将其简化为两个。
static void Main(string[] args)
{
if(args.Count() != 2)
{
Usage();
return;
}
var rootDir = args[0];
var output = args[1];
var files = Directory.EnumerateFiles(rootDir,
"*.*proj",
SearchOption.AllDirectories);
var configs = new StringBuilder();
var configDefs = new string[]{
".Debug|Any CPU.ActiveCfg = Debug|Any CPU",
".Release|Any CPU.ActiveCfg = Release|Any CPU",
"Other_configurations_see_solution_for_how"
};
using(var sw = new StreamWriter(output))
{
sw.WriteLine(Resources.Head);
foreach(var file in files)
{
var relpath = file.Substring(rootDir.Length + 1);
var split= relpath.Split('\\');
var name = split[0];
var path = relpath;
sw.WriteLine("Project(\"{{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}}\") = \"{0}\", \"{1}\", \"{0}\"", name, path);
sw.WriteLine("EndProject");
foreach(var configDef in configDefs)
{
configs.AppendLine(string.Format("{0}{1}", file, configDef));
}
}
sw.WriteLine(@"Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
...Other_configurations_see_solution_for_how...
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution");
sw.WriteLine(configs.ToString());
sw.WriteLine(Resources.Tail);
}
}
头看起来有点像:
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
但是我认为第一行中有控制字符-当心!
尾巴看起来像
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
我们构建了一个名为Tree Surgeon的工具来完成此任务。 自从它最初创建以来,随着时间的推移,事情正在审查和讨论,以审查(或放弃它),但是它可以满足您在这里的要求(并且是开源的)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.