在vsix扩展中使用EnvDTE在多项目模板解决方案中添加对共享项目的引用

我创建了一个 Visual Studio multi-project template,其中一个是“共享”项目,另一个是公共“资源”的普通项目。其他 5 个普通项目都需要引用“共享”和“资源”项目。

在vsix扩展中使用EnvDTE在多项目模板解决方案中添加对共享项目的引用

在一个单独的解决方案中,我 create a VISX extension to implement a wizard,但不是将 .vsixmanifest Asset 指向“当前解决方案中的项目”,而是指向我创建的 .zip 多项目模板。

我的意图是然后使用 vsix 向导添加必要的项目引用。 I've already done so with envDTE,而且效果很好......主要是。

添加对“资源”项目的引用没有问题。问题是在尝试添加“共享”项目作为参考时。我已经尝试使用 (Project) 和 (Filename.shproj) 参数。

    DTE VS = automationObject as DTE;

    // This method is called after the solution is created.
    public void RunFinished()
        DTE VS = automationObject as DTE;
    {
        microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();

        Project sharedProj = null;
        Project resourceProj = null;
        List<Project> versionProjs = new List<Project>();
        foreach (Project project in VS.Solution.Projects)
        {
            if (project.Name.Contains("Resources")) { resourceProj = project; }
            else if (project.Name.Contains("Shared")) { sharedProj = project; }
            else { versionProjs.Add(project); }
        }

        foreach (Project version in versionProjs)
        {
            // Add reference to shared project
            VSProject vsProj = (VSProject)version.Object;
            if (sharedProj != null)
            {
                // !!! Shared project should be added as a reference here,but it is causing a critical error. !!!

                //BuildDependency bldDepends = VS.Solution.SolutionBuild.BuildDependencies.Item(version.UniqueName);
                //bldDepends.AddProject(sharedProj.FileName);
                //vsProj.References.Add(sharedProj.FileName);

                //vsProj.References.AddProject(sharedProj);
            }

            // Add reference to the Resources project
            if (resourceProj != null) { vsProj.References.AddProject(resourceProj); }
        }
    }

AddProject(Project) 结果:

异常抛出:'System.Runtime.InteropServices.COMException' in 模板扩展.dll

灾难性故障(来自 HRESULT 的异常: 0x8000FFFF (E_UNEXPECTED))

AddProject(Filename.shproj) 结果:

抛出异常:'System.Runtime.InteropServices.COMException' in 模板扩展.dll

请确保文件可访问, 并且它是一个有效的程序集或 COM 组件。


编辑 1

我决定向公众开放我的项目。可以在此处找到此问题的源代码:https://github.com/theBIMdev/RevitExtension

有问题的代码特别是在 Wizard.cs file. 注释掉的部分代表 3 种不同的尝试。

  • 将项目添加到依赖项
  • vsProj.References.Add(sharedProj.FileName);
  • vsProj.References.AddProject(sharedProj);
mkjianglijun 回答:在vsix扩展中使用EnvDTE在多项目模板解决方案中添加对共享项目的引用

如果没有通过 repro 进行调试,我最初怀疑共享项目类型可能不支持该特定操作。

话虽如此,您无需以编程方式尝试添加引用,而只需将项目引用添加到需要它们的模板化项目文件中即可。

几年前我做了类似的事情,在那里我利用 ReplacementsDictionary 将我需要的自定义项目名称交换到各种项目文件中。可悲的是,我在一段时间前丢失了该代码,但这可能会给您提供一个可选的解决方案。即,考虑通过模板化的项目文件添加对共享项目的引用。

真诚的

本文链接:https://www.f2er.com/3479.html

大家都在问