【发布时间】:2010-09-28 22:00:32
【问题描述】:
是否可以使用 c# 在 VS2005 中以编程方式或动态创建项目?如果是这样,有人可以提供一些关于如何实现这一点的想法或链接吗?
【问题讨论】:
-
我很好奇你在这样的任务中的用法?
标签: dynamic visual-studio-2005 project
是否可以使用 c# 在 VS2005 中以编程方式或动态创建项目?如果是这样,有人可以提供一些关于如何实现这一点的想法或链接吗?
【问题讨论】:
标签: dynamic visual-studio-2005 project
您还可以使用 msbuild api 以编程方式创建和编辑 msbuild 文件。有关详细信息,请参见此处: http://msdn.microsoft.com/en-us/library/microsoft.build.buildengine.project.aspx
下面是一个创建编译单个 .cs 文件并引用外部程序集的项目的示例:
Engine engine=new Engine();
engine.BinPath=RuntimeEnvironment.GetRuntimeDirectory();
Project project=engine.CreateNewProject();
project.AddNewImport(@"$(MSBuildBinPath)\Microsoft.CSharp.targets", null);
BuildPropertyGroup props=project.AddNewPropertyGroup(false);
props.AddNewProperty("AssemblyName", "myassembly");
props.AddNewProperty("OutputType", "Library");
BuildItemGroup items=project.AddNewItemGroup();
items.AddNewItem("Reference", "Some.Assembly");
items.AddNewItem("Compile", "somefile.cs");
project.Save("myproject.csproj")
【讨论】:
.csproj 文件实际上是代表 msbuild 执行的 XML 文档。
这些文件可以使用 System.xml 生成,如果您需要验证它,有一个详细的架构 here。
【讨论】:
Visual Studio 项目是“简单的”XML 文件。我这么说只是因为它们里面发生了很多事情。要了解它们的组成:创建一个空项目并在文本编辑器中打开 csproj(C#.NET 项目)或 vsproj(VB.NET 项目)。
然后您可以通过代码生成此 XML 文件。
【讨论】:
如果您希望能够一遍又一遍地创建相同的东西,Visual Studio 支持模板。它甚至具有在从模板创建文件时扩展的宏。例如,当创建基于模板的文件时,$username$ 将替换为登录用户的名称。
如果这不是您想要做的,那么您可能会使用 Visual Studio 可扩展性来控制项目的创建。
【讨论】:
看看这个 CodePlex 项目的源代码:STSDev
它最终成为一个 WinForm 应用程序,可以动态生成带有项目的 Visual Studio 解决方案。
它是为 Sharepoint 设计的,但它使用的理念正是您所寻找的。p>
基思
【讨论】:
可以创建允许在其中创建子项目的 Visual Studio 项目模板。当您定义在项目创建期间要运行的子项目模板时,这不会是真正动态的。
要真正动态化,您需要执行以下任一操作:
或者:
【讨论】:
对于 Visual Studio 2017,我找到了基于 envdte 的解决方案。您不需要 xml 操作,它使用 Visual Studio IDE。你可以在这里找到项目Nager.TemplateBuilder
【讨论】: