Dynamic 使用C在VS2005中动态创建项目#

Dynamic 使用C在VS2005中动态创建项目#,dynamic,visual-studio-2005,project,Dynamic,Visual Studio 2005,Project,是否可以使用c#在VS2005中以编程方式或动态方式创建项目?如果有的话,有人能提供一些关于如何实现这一点的想法或链接吗?Visual Studio项目是“简单”的XML文件。我这么说仅仅是因为他们身上发生了很多事情。了解它们的组成:创建一个空项目,并在文本编辑器中打开csproj(C#.NET项目)或vsproj(VB.NET项目) 然后可以通过代码在中生成此XML文件。.csproj文件实际上是表示msbuild执行的XML文档 这些文件可以使用System.xml生成,如果需要验证,则会提

是否可以使用c#在VS2005中以编程方式或动态方式创建项目?如果有的话,有人能提供一些关于如何实现这一点的想法或链接吗?

Visual Studio项目是“简单”的XML文件。我这么说仅仅是因为他们身上发生了很多事情。了解它们的组成:创建一个空项目,并在文本编辑器中打开csproj(C#.NET项目)或vsproj(VB.NET项目)


然后可以通过代码在中生成此XML文件。

.csproj文件实际上是表示msbuild执行的XML文档


这些文件可以使用System.xml生成,如果需要验证,则会提供详细的架构。

还可以使用msbuild api以编程方式创建和编辑msbuild文件。详情请参见此处:

以下示例创建了一个编译单个.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")

如果您希望能够一次又一次地创建相同的内容,VisualStudio支持模板。它甚至有宏,当从模板创建文件时,宏会展开。例如,基于模板创建文件时,$username$将替换为登录用户的名称


如果这不是您想要做的,那么您可能将要使用VisualStudio扩展性来控制项目的创建

看看这个CodePlex项目的源代码:

它最终成为一个WinForm应用程序,可以动态生成一个带有项目的Visual Studio解决方案

它面向Sharepoint,但它所使用的理念正是您所寻找的


Keith

可以创建Visual Studio项目模板,允许在模板中创建子项目。当您定义在项目创建过程中要运行的子项目模板时,这不会是真正动态的

要实现真正的动态,您需要执行以下任一操作:

  • 以编程方式创建csproj/vbproj文件以及您想要的所有项目。这将包括在XML中设置引用等
或:

  • 创建一个项目模板,并通过VS项目创建机制调用创建项目方法。这可能非常棘手,因为我在上面找到了0个文档,并且正在从MS ASP.NET MVC project create wizard DLL学习如何通过反向工程来完成(因为这将动态创建单元测试项目)

对于Visual Studio 2017,我找到了一个基于envdte的解决方案。您不需要xml操作,而是使用VisualStudioIDE。你可以在这里找到这个项目

我很好奇你对这样一个任务的用法?Engine=new Engine();该行在VS 2012上不起作用