c# - 如何使用 IVsSolution.CreateProject 以编程方式重新加载现有的已卸载的 c# 项目

标签 c# visual-studio-2012 envdte vsix

我想在我的工作室扩展中添加两个按钮,用于卸载/加载开放式解决方案的所有测试项目。 经过很多麻烦之后,卸载工作正常。现在我仍然无法加载它们。

不知何故,我无法弄清楚如何正确使用 IVsSolution.CreateProject() 并且我没有找到任何示例。这是我到目前为止所拥有的,它总是返回我 VS_E_PROJECTALREADYEXISTS:

internal sealed class ProjInfo
{
    public ProjInfo(Guid guid, string name, string uniqueName)
    {
        Guid = guid;
        Name = name;
        UniqueName = uniqueName;
    }

    public Guid Guid { get; private set; }
    public string Name { get; private set; }
    public string UniqueName { get; private set; }

}

//....

private static void LoadProject(ProjInfo project, IVsSolution solutionService)
{
    IVsHierarchy selectedHierarchy;
    string solPath;
    string solFileName;
    string opstName;
    solutionService.GetSolutionInfo(out solPath, out solFileName, out opstName);
    string projRef;
    solutionService.GetProjectOfGuid(project.Guid, out selectedHierarchy);
    solutionService.GetProjrefOfProject(selectedHierarchy, out projRef);
    Guid projectType;
    IntPtr proj;
    solutionService.GetProjectTypeGuid(0, project.UniqueName, out projectType);
    projectType = Guid.Empty;
    var iidProject = Guid.Empty; //project.Guid;
    int res = VSConstants.S_OK;

    if (ErrorHandler.Failed(res = solutionService.CreateProject(ref projectType, solPath + project.UniqueName, null, null, (uint)__VSCREATEPROJFLAGS.CPF_OPENFILE, ref iidProject, out proj)))
    {
        Debug.Fail(String.Format("IVsolution::CreateProject retuend 0x{0:X}.", res));
    }
}

我尝试使用更多创建标志(__VSCREATEPROJFLAGS.CPF_OVERWRITE、__VSCREATEPROJFLAGS.CPF_SILENT)的任意组合,并且没有将引用 projectType 和 iidProject 设置为 Guid.Emtpy。没有任何效果,我总是得到结果 VS_E_PROJECTALREADYEXISTS。

知道如何实现我在上下文菜单上以编程方式卸载/重新加载项目的功能吗?也许是一种完全不同的方法? 非常感谢

最佳答案

使用自动化模型 (EnvDTE),您可以从包中获取 EnvDTE.DTE 服务,并假设在解决方案资源管理器调用 dte.ExecuteCommand("Project.ReloadProject") 中选择卸载的项目节点;

或者,尝试 IVsSolution4.ReloadProject

我创建了两篇文章/示例:

HOWTO Unload/Reload a project from a Visual Studio package

关于c# - 如何使用 IVsSolution.CreateProject 以编程方式重新加载现有的已卸载的 c# 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29700319/

相关文章:

c# - 内存未释放 .Net 应用程序

c# - 取消任务而不在循环中检查取消标记

c# - 如何针对 mongodb 实现通用存储库?

entity-framework - Visual Studio 2012 没有 Entity Framework 菜单

c# - 在 c# 中从 vs2008 迁移到 vs2012 的 Crystal 报表上未找到文件异常未处理

visual-studio - 通过包管理器控制台从解决方案中删除项目

visual-studio - 使用自定义加载项更改 Visual Studio 颜色的性能

c# - Windows XP 上的 System.Drawing.Image.FromStream() "Parameter is not valid"

visual-studio-2012 - VSIX 注册和注销问题

powershell - 在管道变量上“必须指定一个对象”到 Get-Member