Visual studio 2017 Visual Studio 2017-VSIX包在更新NuGet包后停止工作

Visual studio 2017 Visual Studio 2017-VSIX包在更新NuGet包后停止工作,visual-studio-2017,vsix,vs-extensibility,vsixmanifest,Visual Studio 2017,Vsix,Vs Extensibility,Vsixmanifest,复制步骤: 开放Visual Studio 2017。选择文件。。新的。。项目 从“新建项目”对话框中,选择“扩展性”。。VSIX项目 从解决方案资源管理器中选择新项目。右键单击并添加。。新项目。。可扩展性。。自定义命令 现在,您有了一个从标准模板生成的完整自定义命令。在调试器中运行它。您将得到一个VisualStudio的实验实例。从菜单中,选择工具。。。调用命令1。。。您的自定义命令工作 点击“OK”并退出Visual Studio的实验实例 现在,回到原始解决方案,单击“工具”。。NuGe

复制步骤:

  • 开放Visual Studio 2017。选择文件。。新的。。项目
  • 从“新建项目”对话框中,选择“扩展性”。。VSIX项目
  • 从解决方案资源管理器中选择新项目。右键单击并添加。。新项目。。可扩展性。。自定义命令
  • 现在,您有了一个从标准模板生成的完整自定义命令。在调试器中运行它。您将得到一个VisualStudio的实验实例。从菜单中,选择工具。。。调用命令1。。。您的自定义命令工作
  • 点击“OK”并退出Visual Studio的实验实例
  • 现在,回到原始解决方案,单击“工具”。。NuGet包管理器。。管理解决方案的NuGet包
  • 在“更新”选项卡中,您将看到对模板中包含的标准包有许多更新。将它们全部选中并更新。重复此操作,直到所有软件包都已更新。在此过程中,您可能需要重新启动VS
  • 再次构建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);
    }
    
  • 再次调试VSIX包

  • 选择工具。。。调用命令1
  • 出现错误:“Command1Package”包未正确加载。
  • 如果按照%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的Nuget配置为使用新的包引用模式:

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

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

    几个月以来,每当我面对不可能的裸体问题时,我就是这么做的。我将旧的packages.config复制到某个地方,从项目中删除它,记住“根”包,删除每个引用,检查csproj,并从nuget添加新引用(尝试添加尽可能少的引用,以便子引用可以)。Nuget现在是所有参考资料的未来(无论我们喜欢与否,我们都必须咬紧牙关),即使是Visual Studio参考资料。

    天哪!这很有魅力。谢谢你,好朋友!哎哟在尝试使用模板添加新命令后,VisualStudio收回了所有这些废话。我想我现在会忘记使用模板了。