visual-studio-2017 - Visual Studio 2017 - VSIX 包在更新 NuGet 包后停止工作
问题描述
重现步骤:
- 打开 Visual Studio 2017。选择文件..新建..项目..
- 从“新建项目”对话框中,选择“扩展性.. VSIX 项目..
- 从解决方案资源管理器中选择新项目。右键单击并添加.. 新项目.. 可扩展性.. 自定义命令..
- 您现在拥有从标准模板构建的完整自定义命令。在调试器中运行它。您将获得 Visual Studio 的实验性实例。从菜单中,选择工具...调用 Command1...您的自定义命令有效!
- 点击“确定”并退出 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,版本=15.8.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。
解决方案
有很多方法可以解决这个问题(混乱)。这是一个
- 首先,将 Visual Studio 2017 的 Nuget 配置为使用新的包引用模式。https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files:
- 删除旧
packages.config
文件。 - 删除所有现有参考(见下图)
- 手动编辑 .csproj 并删除所有包含“..packages ...”内容的行,包括检查某些 nuget 存在的所有行,以及相关的导入和任务。
- 添加
Microsoft.VisualStudio.Shell.15.0
和Newtonsoft.Json
作为nuget包。您现在应该看到类似这样的内容(注意带有蓝色图标的新 nuget 引用):
- 您应该能够成功编译和运行
几个月来,每次我遇到不可能的 nuget 问题时,我都会这样做。我将旧的packages.config复制到某处,从项目中删除它,记住“根”包,删除每个引用,检查csproj,并从nuget添加新引用(尝试添加尽可能少的子引用,这样子引用就可以了)。Nuget 现在是所有引用的未来(无论我们喜欢与否,我们都必须咬紧牙关),即使对于 Visual Studio 也是如此。
推荐阅读
- c# - File.ReadAllBytes & Memorystream.ToArray 返回错误数据
- go - 具有 interface{} 参数的方法的接口不起作用
- google-apps-script - 具有命名值的 Googlescript 代码不起作用
- java - Spring Security - 覆盖 WebSecurityConfigurerAdapter 的配置(AuthenticationManagerBuilder)是否会影响全局应用程序?
- magento2 - 如何在管理面板中修复“处理您的请求时出错 :: 指定无效的父 ID (Magento_Backend::mgs)”..?
- javascript - 将字符串从 laravel 控制器转换为 javascript
- angular - Visual Studio devops Angular 构建失败
- android - FrameManager 返回 NullPointer 异常
- python - 如何在 Python 中只允许列出最大数量的项目
- python - Django 发布数据未保存在管理数据库中