【问题标题】:Visual Studio 2017 - VSIX Package stops working after updating NuGet packagesVisual Studio 2017 - VSIX 包在更新 NuGet 包后停止工作
【发布时间】:2018-07-23 13:05:30
【问题描述】:

重现步骤:

  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, Version=15.8.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。

【问题讨论】:

    标签: visual-studio-2017 vsix vs-extensibility vsixmanifest


    【解决方案1】:

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

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

    • 应该可以编译运行成功

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

    【讨论】:

    • 天哪!这就像一个魅力。谢谢你,好伙伴!
    • 哎哟!在您尝试使用模板添加新命令后,Visual Studio 会收回所有这些废话。我想我现在要忘记使用模板了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 2020-02-12
    相关资源
    最近更新 更多