无法加载 System.Threading.Tasks.Extensions

Unable to load System.Threading.Tasks.Extensions

我有一个基于 .net Framework 4.5.1 的 Web 项目。我们正在尝试为该项目添加 PostgreSQL 支持。使用 Nuget,我已经为项目安装了 4.0.4 npgsql。在引用下,我看到以下内容被添加到项目中。

  1. Npgsql - 4.0.4.0 - 运行时版本 v4.0.30319
  2. System.Threading.Tasks.Extensions - 4.2.0.0 - 运行时版本 v4.0.30319

当我尝试 运行 项目并连接并从数据库获取数据时,我收到以下错误,提示 FileNotFoundException:

    System.TypeInitializationException
      HResult=0x80131534
      Message=The type initializer for 'com.rsol.RConfig' threw an exception.
      Source=RConfig
      StackTrace:
       at com.rsol.RConfig.getInstance() in C:\Workspaces\PS\RConfig\RConfig.cs:line 1113
       at RAdmin.Global.Application_Start(Object sender, EventArgs e) in C:\Workspaces\PS\RAdmin\Global.asax.cs:line 528

    Inner Exception 1:
    TypeInitializationException: The type initializer for 'com.rsol.Db.DbMgr' threw an exception.

    Inner Exception 2:
    FileNotFoundException: Could not load file or assembly 'System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The system cannot find the file specified.

    Inner Exception 3:
    FileNotFoundException: Could not load file or assembly 'System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The system cannot find the file specified.
使用 Nuget 安装的

System.Threading.Tasks.Extensions 未加载到项目中。当我检查 System.Threading.Tasks.Extensions 引用的属性时,dll 文件存在于该位置。我还尝试使用 gacutil 将 System.Threading.Tasks.Extensions.dll 文件安装到程序集。我仍然遇到同样的错误。

如果您需要任何其他信息,请告诉我。

非常感谢任何帮助。

更新 Nuget 包

https://www.nuget.org/packages/System.Threading.Tasks.Extensions/

会解决你的问题

更新 Nuget 包对我不起作用。

什么有效? 在 app.config 需要更改

<bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />

<bindingRedirect oldVersion="0.0.0.0-4.5.4" newVersion="4.5.4" />

当前版本 4.7.2 应该可以。

微软喜欢 ;)

就我而言,我在升级到 4.5.4 版后遇到了问题,并尝试了@user2713341 的回答。它没有用,但让我朝着正确的方向前进。

我的项目没有这个库的绑定,所以我添加了绑定并且它起作用了

<dependentAssembly>
  <assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
</dependentAssembly>

成功了。

请注意,即使版本是 4.5.4,它也应该是 4.2.0.1。

尝试下载包并明确添加对您的项目的引用。应该可以,我刚刚解决了。

问题出在 *.csproj 文件中。对 System.Threading.Tasks.Extensions.4.5.4 的引用错误,因为此 dll 未加载。 从 lib 引用正确的框架版本文件夹后开始工作 旧参考:

<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.2\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
    </Reference>
corrected one:

<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net472\System.Threading.Tasks.Extensions.dll</HintPath>
    </Reference>

请先清理 nuget 缓存,然后运行测试用例它会工作

@Keyjote 的回复对我来说是解决方案的根本,但我没有挑选程序集,而是能够重新安装。这似乎自动修复了 app.config 文件。

工具 -> Nuget 数据包管理器 -> 数据包管理器控制台

Update-Package -reinstall -Project <your project name>

这样您就不需要弄乱语法,也不必弄清楚 PublicKeyToken 值。

如果你想对整个解决方案都这样做,你可以省略-Project <>参数。

我在尝试使用 Entity Framework 核心 (EFC) 版本 3.1.8 和程序包管理器控制台进行迁移时,在不同的上下文中遇到了错误。项目构建成功。

按照此线程中的建议尝试绑定重定向并(重新)安装不同版本的 System.Threading.Tasks.Extensions 以及 EFC(如其他地方所建议的)对我不起作用。

我设法通过

解决了问题
  • 删除我项目根目录中的packages/目录
  • 使用手册 NuGet Package Restore(link 至 Microsoft Docs)通过 Visual Studio

我收到了类似的错误消息 - 但原因不同。在 NUGET 管理器设置的 packages.config 中有一个新版本的引用 - 但在项目引用中有一个旧版本的引用。解决方案——删除项目reference

中的ref

我一直在为 bindingRedirect 苦苦挣扎。 我终于找到了解决我问题的真正陷阱。

我在 .net 4.8 中有一个 WCF 服务器项目,具体取决于 .net 标准 2.0 中的项目。

我正在更新引用项目中的 Nuget 包。 我有各种各样的问题,我不会在这里提及它们。

我在 web.config 中有 bindingRedirects。我不得不重新发现那些是不必要的,甚至可能是冲突的,因为它们会自动生成到 dll.config 中。有多个方面可以使这项工作发挥作用,请参阅别处。

但对我来说真正的难题是对于 IIS,我必须 LINK web.config 到 dll.config。后者是完整的 config-file,具有所有的 bindingRedirects,最终证明是有效的。