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

时间:2008-12-30 20:07:14

标签: dynamic visual-studio-2005 project

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

7 个答案:

答案 0 :(得分:2)

您还可以使用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")

答案 1 :(得分:1)

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

可以使用System.xml生成文件,如果需要对其进行验证,则会有详细的架构here

答案 2 :(得分:0)

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

然后,您可以通过代码生成此XML文件。

答案 3 :(得分:0)

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

如果那不是你想要做的,那么你可能会使用Visual Studio可扩展性来控制项目的创建。

答案 4 :(得分:0)

查看此CodePlex项目的源代码:STSDev

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

它适用于Sharepoint,但它所使用的想法是您正在寻找的。

基思

答案 5 :(得分:0)

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

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

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

或者:

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

答案 6 :(得分:0)

对于Visual Studio 2017,我找到了一个基于envdte的解决方案。你不需要xml操作,它使用visual studio ide。您可以在Nager.TemplateBuilder

找到该项目