代码之家  ›  专栏  ›  技术社区  ›  Quark Soup

Visual Studio 2017-更新nuget包后,vsix包停止工作

  •  2
  • Quark Soup  · 技术社区  · 6 年前

    复制步骤:

    1. 打开Visual Studio 2017。选择文件..新的…项目..
    2. 从“新建项目”对话框中,选择“扩展性”。VSIX项目..
    3. 从解决方案资源管理器中选择新项目。右键单击并添加..新项目..可扩展性..自定义命令..
    4. 现在,您可以使用标准模板构建完整的自定义命令。在调试器中运行它。您将得到一个Visual Studio的实验实例。从菜单中选择工具…调用命令1…您的自定义命令有效!
    5. 单击“确定”并退出Visual Studio的实验实例。.
    6. 现在,回到原来的解决方案中,单击“工具”。Nuget包管理器..管理解决方案的Nuget包…。
    7. 在更新选项卡中,您将看到模板中包含的标准包有许多更新。全部选择并更新。重复此操作,直到更新了所有包。在此过程中,您可能需要重新启动vs。
    8. 再次构建您的vsix包。你可能不得不压制关于这句话的警告:

      public static async task initializeasync(asyncPackage package)
      {
      //验证当前线程是否为UI线程-在command1的构造函数中调用addcommand需要
      //UI线程。
      #pragma warning disable vsthrd109//异步方法中的开关而不是断言
      threadhelper.throwifnotunithread();
      #pragma warning restore vsthrd109//在异步方法中切换而不是断言
      
      olemenucommandservice commandservice=await package.getServiceAsync((typeof(imenucommandservice))作为olemenucommandservice;
      instance=new command1(包,commandService);
      }
      
    9. 再次调试您的vsix包。

    10. 选择工具…调用命令1…
    11. 出现错误:“command1package”包未正确加载。
    12. 如果按照%appdata%目录的说明并读取活动日志,则会看到Microsoft.VisualStudio.Threading 15.8.0.0 Assembly无法加载。

      无法加载文件或程序集“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”或其依赖项之一。

    13. 从解决方案资源管理器中选择新项目。右键单击并添加..新项目..可扩展性..自定义命令..
    14. 现在,您可以使用标准模板构建完整的自定义命令。在调试器中运行它。您将得到一个Visual Studio的实验实例。从菜单中选择工具…调用命令1…您的自定义命令有效!
    15. 单击“确定”并退出Visual Studio的实验实例。
    16. 现在,回到原来的解决方案中,单击“工具”。Nuget包管理器..管理解决方案的Nuget包…
    17. 在更新选项卡中,您将看到模板中包含的标准包有许多更新。全部选择并更新。重复此操作,直到更新了所有包。在此过程中,您可能需要重新启动vs。
    18. 再次构建您的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);
      }
      
    19. 再次调试vsix包。

    20. 选择工具…调用命令1…
    21. 出现错误:“command1package”包未正确加载。 enter image description here
    22. 如果按照%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”或其依赖项之一。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Simon Mourier    6 年前

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

    • 删除旧版 packages.config file.
    • 删除所有现有引用(参见下图)
    • 手动编辑.csproj并删除包含“.packages…”内容的所有行,包括检查某些nuget存在的所有行,以及关联的导入和任务。
    • 添加 microsoft.VisualStudio.Shell.15.0 and newtonsoft.json as a nuget packages.您现在应该看到这样的内容(注意新的nuget引用带有蓝色图标):。

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

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

    . https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files :

    enter image description here

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

    enter image description here

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

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