问题标签 [assemblybinding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
203 浏览

c# - 如何隔离第 3 方 .NET 库的传递程序集依赖项?

环境

对于我们的应用程序和实用程序,我们尝试将我们对所有工具的所有(开源)库依赖项标准化为相同版本;我们不断构建所有工具以确保一切正常。

问题

碰巧我们必须使用封闭源代码的第 3 方 .NET 库程序集。其中一些程序集对开源组件有自己的传递依赖。如果我们碰巧使用相同的开源组件,很可能我们使用的版本与封闭源依赖项不同,因此我们会发生冲突。

问题示例

只是一个例子!

我们的程序集our_abc.dll使用了一个封闭源代码的第三方程序集their_xyz.dll,它引用Newtonsoft.Json.dll了与我们不同的版本。

在这种情况下,在 our_abc 和 their_xyz 之间的“API 表面”上不使用 json 类型,这种情况似乎很常见。

解决方案?

所以,我们想要实现的是我们的代码只使用它需要的版本的开源程序集,而我们引用的封闭源第 3 方程序集应该只使用他们的版本。

理想情况下,这应该通过尽可能少的配置文件恶作剧来实现。对于相当多的部署,使用 GAC 似乎相当笨拙。

我已经阅读过assemblyBinding,但我不确定它是否适合这项工作,因为似乎我们需要手动维护所有应用程序的 app.config 文件中的所有传递依赖项才能正常工作:

链接中的解决方案使其看起来如下所示。鉴于这种依赖情况:

...我知道我可以准备一个app.config文件tool.exe指定在哪里查找 2 ( n) 个不同版本的传递依赖项。

但是,从可维护性 POV 来看,如果我可以将信息与their_xyz“包”捆绑在一起会更好,这样tool.exe就不必知道它的传递依赖关系。这有可能吗?

0 投票
6 回答
15858 浏览

c# - 无法加载文件或程序集'System.Threading.Tasks.Extensions,版本 = 4.2.0.0

我最近安装了 CsvHelper ( https://joshclose.github.io/CsvHelper/ ),当我尝试使用该库时出现以下错误:

无法加载文件或程序集“System.Threading.Tasks.Extensions,Version=4.2.0.0,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

在我的 app.config 我有绑定重定向:

同样在我的项目中,我参考了

\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll

它的版本是 4.2.0.1 我不知道为什么它仍然试图加载库的 4.2.0.0。

我的项目正在运行.net 4.7.2

0 投票
0 回答
178 浏览

.net - 链接配置未生效

我有一个 .dll.config 我想在其中放置一个linkedConfiguration

other.config 看起来像:

当我运行引用 dll 的应用程序时,不支持程序集绑定重定向。来自 fuslogvw:

如果我将上面的运行时节点复制到 .dll.config 中,则重定向是有效的:

关于我做错了什么的任何想法?linkedConfiguration 是否不像我认为的那样工作或有任何常见的陷阱?我怎样才能获得有关问题所在的更多信息?

0 投票
0 回答
168 浏览

nuget - 编译时更改了程序集绑定重定向

我有一项服务,它通过 NuGet 包引用同一解决方案中的少数其他库和一些库。

我有一个库Microsoft.ApplicationInsights.Log4NetAppender和另一个Microsoft.ApplicationInsights.ServiceFabricNative似乎不同意Microsoft.ApplicationInsights.

所以在我的 app.config 我有以下内容:

但是当我编译后查看 service.exe.config 文件包含的内容时,我发现:

这很奇怪,因为解决方案中没有其他库引用该版本。

这会导致引发异常并表示无法加载此类库的版本 2.12.0.21496 的问题。

我错过了什么?尽管我做了所有尝试,但还是任意数字?

注意:这些是在服务结构解决方案中引用其他库的服务

0 投票
2 回答
267 浏览

c# - RabbitMQ 连接工厂在我的应用程序箱中找不到 System.Threading.Tasks.Extensions

我有以下代码

上面的最后一行抱怨以下错误

FileLoadException:无法加载文件或程序集“System.Threading.Tasks.Extensions,Version=4.2.0.0,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

我检查了 Fusion Log,它显示以下内容

我打开了bin在 IL Disassembler 中找到的 DLL 并检查了清单,发现以下内容

System.Threading.Tasks.Extensions.DLL 是 4.2.0.1 以上依赖于已经在 bin 中的 System.Runtime.CompilerServices.Unsafe 4.0.4.1。

所以 4.2.0.0 与 4.2.0.1 不匹配,所以我决定添加以下绑定重定向

我仍然收到相同的运行时错误抱怨,它没有找到扩展 4.2.0.0。我错过了什么?

0 投票
0 回答
150 浏览

c# - FileLoadException 与 Newtonsoft.Json 试图在 4.5.1 WebForms 中使用 MapHttpRoute

我在我的 4.5.1 WebForms 应用程序中添加了一个 2.1 Web API 控制器类。之后,我的 packages.config 看起来像:

我的 Web.config 如下所示:

我按照本教程中的说明进行操作:https ://docs.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with-aspnet-web-api/using-web-api-with -aspnet-web-forms

我将以下内容添加到Application_Start

但是,当我运行并尝试运行此行时,我收到以下错误:

我尝试删除 web.config 中的绑定重定向信息并收到相同的错误。

更新

最初,我的库 dll 引用了 Newtonsoft 的 11.0.2。我将它们更新到 12.0.2 以试图使没有的工作正常进行。所以我把我所有的项目(包括网站)都放回了 11.0.2 仍然有同样的问题。但我想指出,我在一个 Webforms 项目中进行了测试,但没有引用我的库 dll,该库 dll 已经对 Newtonsoft 有 12.0.3 引用并且它有效。因此,我有一些引用 Newtonsoft 的依赖 dll,但我不知道它可能是什么。

所有参考 11.0.2 和网站运行时(如果我注释掉对 的调用MapHttpRoute),AppDomain.CurrentDomain.GetAssemblies()正确显示:

{Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed}

融合日志

0 投票
0 回答
15 浏览

server - 从 Task Runner App 执行应用程序时“无法加载文件或程序集”

我们有一个使用 DLL 的 .NET 应用程序。DLL 在 GAC 中注册。我们有一个任务运行器应用程序(来自 BroadCom 的 ESP)来执行我们的应用程序。

  • 目标服务器上的 ESP 服务设置为使用“允许服务与桌面交互”的本地系统帐户
  • AD 帐户通过 ESP 作业配置传递给服务以执行应用程序
  • 该AD账号是管理员,批量登录,服务登录

当我通过我自己的个人 AD 帐户运行作业时,RDP'd 进入服务器,它是成功的。当我通过 AD 服务帐户运行作业时,RDP'd 进入服务器,它是成功的。当我使用相同的 AD 帐户通过 ESP 运行作业时,我得到“无法加载文件或程序集”。

我们联系了供应商并发送了日志——ESP 正在成功执行应用程序,但是当 .NET 应用程序通过 ESP 运行时,它找不到 DLL。

这不是烫发问题,因为我可以使用该帐户登录并手动执行,没问题。

我怀疑这是一个环境/服务器配置问题,但我们已经为此努力了一个月,但我没有线索。任何帮助将非常感激。

0 投票
0 回答
20 浏览

asp.net - 为什么这个绑定失败了?

从这个日志我可以看到:

  • 它正在应用程序的 bin 目录中查找程序集
  • 它正在接受重定向

我还验证了 bin 文件夹中的文件确实是 4.1.0.0 版本(我通过右键单击该文件并转到属性-> 详细信息> 文件版本进行检查)。

我不明白为什么,在我已经验证为 4.1.0.0 版本的 bin 文件夹中找到文件后,它会将其识别为 2.0.0.0 版本。

我从这里去哪里?如果我可以提供其他信息,请告诉我,我会尽力提供。

在此处输入图像描述