【发布时间】:2021-08-01 02:17:26
【问题描述】:
我创建了一个Visual Studio multi-project template,其中一个是“共享”项目,另一个是普通“资源”项目。其他 5 个普通项目每个都需要引用“共享”和“资源”项目。
然后我在一个单独的解决方案上 create a VISX extension to implement a wizard,但不是将 .vsixmanifest 资产指向“当前解决方案中的项目”,而是指向我创建的 .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”在 模板扩展.dll
请确保该文件是可访问的, 并且它是一个有效的程序集或 COM 组件。
编辑 1
我决定将我的项目向公众开放。这个问题的源代码可以在这里找到:https://github.com/theBIMdev/RevitExtension
违规代码具体在Wizard.cs file. 注释掉的部分代表 3 种不同的尝试。
- 将项目添加到依赖项中
- vsProj.References.Add(sharedProj.FileName);
- vsProj.References.AddProject(sharedProj);
编辑 2
这个问题已经引起了一些关注,并被微软here上报。
【问题讨论】:
标签: visual-studio templates vsix envdte vs-extensibility