【问题标题】:Dynamically creating a project in VS2005 using C#VS2005中使用C#动态创建项目
【发布时间】:2010-09-28 22:00:32
【问题描述】:

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

【问题讨论】:

  • 我很好奇你在这样的任务中的用法?

标签: dynamic visual-studio-2005 project


【解决方案1】:

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

【讨论】:

  • 引擎引擎=新引擎();此行不适用于 VS 2012
【解决方案2】:

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

这些文件可以使用 System.xml 生成,如果您需要验证它,有一个详细的架构 here

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

        它是为 Sharepoint 设计的,但它使用的理念正是您所寻找的。​​p>

        基思

        【讨论】:

          【解决方案6】:

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

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

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

          或者:

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

          【讨论】:

            【解决方案7】:

            对于 Visual Studio 2017,我找到了基于 envdte 的解决方案。您不需要 xml 操作,它使用 Visual Studio IDE。你可以在这里找到项目Nager.TemplateBuilder

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-11-18
              • 2015-02-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-11-14
              相关资源
              最近更新 更多