首页 > 解决方案 > Visual Studio 2017 - VSIX 包在更新 NuGet 包后停止工作

问题描述

重现步骤:

  1. 打开 Visual Studio 2017。选择文件..新建..项目..
  2. 从“新建项目”对话框中,选择“扩展性.. VSIX 项目..
  3. 从解决方案资源管理器中选择新项目。右键单击并添加.. 新项目.. 可扩展性.. 自定义命令..
  4. 您现在拥有从标准模板构建的完整自定义命令。在调试器中运行它。您将获得 Visual Studio 的实验性实例。从菜单中,选择工具...调用 Command1...您的自定义命令有效!
  5. 点击“确定”并退出 Visual Studio 的实验实例。
  6. 现在,回到原始解决方案,单击工具.. NuGet 包管理器.. 管理解决方案的 NuGet 包...
  7. 在更新选项卡中,您将看到模板中包含的标准包的许多更新。全部选择并更新它们。重复,直到您的所有软件包都已更新。在此过程中,您可能需要重新启动 VS。
  8. 再次构建您的 VSIX 包。您可能必须取消围绕此语句的警告:

    public static async Task InitializeAsync(AsyncPackage package)
    {
        // Verify the current thread is the UI thread - the call to AddCommand in Command1's constructor requires
        // the UI thread.
    #pragma warning disable VSTHRD109 // Switch instead of assert in async methods
        ThreadHelper.ThrowIfNotOnUIThread();
    #pragma warning restore VSTHRD109 // Switch instead of assert in async methods
    
        OleMenuCommandService commandService = await package.GetServiceAsync((typeof(IMenuCommandService))) as OleMenuCommandService;
        Instance = new Command1(package, commandService);
    }
    
  9. 再次调试 VSIX 包。

  10. 选择工具...调用命令 1...
  11. 您收到错误消息:“Command1Package”包未正确加载。 在此处输入图像描述
  12. 如果按照 %AppData% 目录的说明阅读活动日志,您将看到无法加载 Microsoft.VisualStudio.Threading 15.8.0.0 程序集。

    无法加载文件或程序集“Microsoft.VisualStudio.Threading, Version=15.8.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。该系统找不到指定的文件。System.IO.FileNotFoundException:无法加载文件或程序集“Microsoft.VisualStudio.Threading,版本=15.8.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。

标签: visual-studio-2017vsixvs-extensibilityvsixmanifest

解决方案


有很多方法可以解决这个问题(混乱)。这是一个

在此处输入图像描述

  • 删除旧packages.config文件。
  • 删除所有现有参考(见下图)
  • 手动编辑 .csproj 并删除所有包含“..packages ...”内容的行,包括检查某些 nuget 存在的所有行,以及相关的导入和任务。
  • 添加Microsoft.VisualStudio.Shell.15.0Newtonsoft.Json作为nuget包。您现在应该看到类似这样的内容(注意带有蓝色图标的新 nuget 引用):

在此处输入图像描述

  • 您应该能够成功编译和运行

几个月来,每次我遇到不可能的 nuget 问题时,我都会这样做。我将旧的packages.config复制到某处,从项目中删除它,记住“根”包,删除每个引用,检查csproj,并从nuget添加新引用(尝试添加尽可能少的子引用,这样子引用就可以了)。Nuget 现在是所有引用的未来(无论我们喜欢与否,我们都必须咬紧牙关),即使对于 Visual Studio 也是如此。


推荐阅读