【问题标题】:VSPackage command that creates a new solution创建新解决方案的 VSPackage 命令
【发布时间】:2015-04-05 22:52:31
【问题描述】:

如何在 VSPackage 中创建一个命令来创建一个新的解决方案,其中包含一个新项目(C# 类库),其中包含 1 个 .cs 文件?

【问题讨论】:

    标签: c# visual-studio-2013 vspackage


    【解决方案1】:

    这不是很简单,但MSDN 上有一个有趣的指南,解释了如何做到这一点。它适用于外接程序,但在 VSPackage 中,您可以使用相同的一组 Visual Studio DTE 对象(DTE 应用程序)。

    您可以定义一个使用 GetProjectTemplate 和 AddFromTemplate 的方法来创建两个控制台项目。您可以在 VSPackage 类的方法 Initialize 中定义 OLE 菜单命令(如果这是您要查找的内容):

     protected override void Initialize()
     {
         //// Create the command for the menu item.
         var aCommand = new CommandID(GuidList.GuidCmdSet, (int)PkgCmdIdList.CmdId);
         var menuItemEnable = new OleMenuCommand((s, e) => createProjectsFromTemplates(), aCommand);
     }
    

    然后定义一个与创建项目解决方案的命令(在本例中为createProjectsFromTemplates)关联的方法:

        private DTE2 _mApplicationObject;
    
        public DTE2 ApplicationObject
        {
            get
            {
                if (_mApplicationObject != null) return _mApplicationObject;
                // Get an instance of the currently running Visual Studio IDE
                var dte = (DTE)GetService(typeof(DTE));
                _mApplicationObject = dte as DTE2;
                return _mApplicationObject;
            }
        }
    
    public void createProjectsFromTemplates()
    {
        try
        {
            // Create a solution with two projects in it, based on project 
            // templates.
            Solution2 soln = (Solution2)ApplicationObject.Solution;
            string csTemplatePath;
    
            string csPrjPath = "C:\\UserFiles\\user1\\addins\\MyCSProject"; 
            // Get the project template path for a C# console project.
            // Console Application is the template name that appears in 
            // the right pane. "CSharp" is the Language(vstemplate) as seen 
            // in the registry.
            csTemplatePath = soln.GetProjectTemplate(@"Windows\ClassLibrary\ClassLibrary.vstemplate", 
              "CSharp");
            System.Windows.Forms.MessageBox.Show("C# template path: " + 
              csTemplatePath);
                // Create a new C# console project using the template obtained 
            // above.
            soln.AddFromTemplate(csTemplatePath, csPrjPath, "New CSharp 
              Console Project", false);
    
        }
        catch (System.Exception ex)
        {
            System.Windows.Forms.MessageBox.Show("ERROR: " + ex.Message);
        }
    }
    

    对于 10.0 之后的 Visual Studio 版本,模板项目的 zip 不再可用。 .vstemplate必须被引用,并且可以在该文件夹下找到所有的项目模板:

    C:\Program Files (x86)\Microsoft Visual Studio 1x.0\Common7\IDE\ProjectTemplates\
    

    有关此MSDN link 的更多信息。

    该方法应基于 c# 项目模板创建一个包含一个 C# 项目的解决方案(例如,包含 class1.cs 作为初始文件)。

    如果您愿意,您也可以定义自己的模板并基于该自定义模板创建解决方案。这是来自MSDN 的关于如何创建自定义模板的指南。

    希望对你有帮助。

    【讨论】:

    • 非常有见地,谢谢。但是你怎么知道要为模板写“ConsoleApplication.zip”呢?你在哪里看到这个?在哪个右侧窗格中?
    最近更新 更多