【问题标题】:Howto add existing projects to visual studio project via template wizard如何通过模板向导将现有项目添加到 Visual Studio 项目
【发布时间】:2011-12-07 16:03:53
【问题描述】:

我想将现有项目添加到由模板生成的新解决方案中。我可以通过 vstemplate 文件实现这一点,还是必须使用 IWizard。如果我必须使用 IWizard,我该如何正确使用它。目前我尝试了以下方法:

  1. 添加一些解决方案文件夹和一个项目的多项目模板
  2. 带有自定义向导数据的向导。 $wizarddata$ 包含一些指向已经存在于硬盘上的项目的相对路径。在向导中,我选择了这些项目的基本路径。现在如何将此项目添加到我的解决方案中?

主要问题似乎是解决方案对象不包含任何内容:

var type = Type.GetTypeFromProgID("VisualStudio.DTE.10.0");
var dte2 = (EnvDTE80.DTE2)Activator.CreateInstance(type);
var solution = (EnvDTE100.Solution4)dte2.Solution;
var projects = dte2.ActiveSolutionProjects;

projects 不包含任何项目。这同样适用于 dte2.Solution.Projects。此代码在 IWizard 实现的 RunFinished 函数中调用。或者:

var type = Type.GetTypeFromProgID("VisualStudio.DTE.10.0");
var dte2 = (EnvDTE80.DTE2)Activator.CreateInstance(type);
dte2.ExecuteCommand("File.AddExistingProject", "X:\\Path\\To\\Project\\ProjectName.csproj");

将引发 COM 异常。如果我从 Visual Studio 中的宏执行 ExecuteCommand,它将正常工作。我做错了什么?

【问题讨论】:

    标签: visual-studio templates wizard envdte


    【解决方案1】:

    好的,我发现了问题。上面创建 DTE 对象的代码 sn-p 不能正常工作。如果我记得 RunStarted 函数中的自动化对象并将在 RunFinished 函数中使用它,那么一切都会按预期工作:

    public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
    {
        // ...
        dte = automationObject as DTE;
    }
    
    public void RunFinished()
    {
        // ...
        // projects will automatically added relative
        dte.ExecuteCommand("File.AddExistingProject", "\""+path+"\"");
    }
    

    【讨论】:

    • 我也使用这种方法来获取服务器资源管理器连接管理器。使用此代码: var dte = automationObject as DTE; Microsoft.VisualStudio.Shell.ServiceProvider sp = new Microsoft.VisualStudio.Shell.ServiceProvider((IOleServiceProvider)dte); IVsDataExplorerConnectionManager seConnectionsMgr = (IVsDataExplorerConnectionManager)sp.GetService(typeof(IVsDataExplorerConnectionManager).GUID);希望这可以为其他人节省一些时间。
    猜你喜欢
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多