问题标签 [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 投票
9 回答
57100 浏览

asp.net - 无法加载文件或程序集 System.Web.Http,版本 = 5.2.2.0

我刚刚将一个 Asp.Net Web Api 2.2 项目上传到生产服务器,我得到了标题中所述的错误。

在我的 Web.config 中,我已经有了这个:

该文件确实存在于 bin 中。什么会导致这个?
我所有的 Asp.Net Web API 文件都是最新的,并显示 5.2.2 作为版本。它在我的开发机器上运行良好。

0 投票
2 回答
520 浏览

c# - 在 InitializeComponent 或 x:Class= 处出现 FileLoadException

InitializeComponent我在-method处得到一个文件加载器异常(第一次机会),或者调试器在x:Class多个 WPF 用户控件的 xaml-root 的属性处中断。尽管异常会大大减慢导航速度,但一切正常。

这是异常消息:

无法加载文件或程序集 'Company.Solution.UserInterface, Version=0.1.5568.25577, Culture=neutral, PublicKeyToken=45069ab0c15881ce' 或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

这是融合日志:

我的项目结构有一个引用模块项目(发生异常)的根项目。模块项目本身引用了作为上述探测“Company.Product.UserInterface.dll”目标的项目,其中包含一些资源/控件/样式/原语/转换器等。

我怎样才能摆脱FileLoadExceptions

另一个更完整的 Fusion-log:

目前发生异常时,SolutionExplorer 中引用的程序集版本为 0.1.5577.18123(在所有引用 ..UserInterface.dll 的解决方案中。我不知道是谁查找了 0.1.5577.18122,这个版本从未存在过)

如果我运行一个新的重建,我会得到同样的错误,Fusion 会寻找(我从来没有这个版本号):

找到的版本是:

Visual Studio 版本为 2013 Ultimate,项目基于 .net4.5 构建,程序集版本在构建过程中自动生成。我将构建日志上传到 tinyupload,因为它太大了。完整的 Fusion-log 可以在 pastebin找到。

0 投票
0 回答
236 浏览

nuget - Add-BindingRedirect 不会改变 App.config 虽然它应该

我在这里发布了 nuget 包。它基本上是一个 .net 程序集女巫

  • 参考 FSharp.Core 4.3.1
  • 参考 FParsec
    • 引用 FSharp.Core 4.0.0.0 (!)

一切都很简单。

现在,当我将包添加到新的 VS2013 C# 项目时,它不会将标签添加到 app.config,这意味着它在运行时崩溃,并显示“无法加载文件或程序集 'FSharp.Core,版本 = 4.0。 0.0 ...”消息。

如果手动添加标签,它可以工作。Add-BindingRedirect 命令也不做任何事情。显然它没有看到 FSharp.Core 的问题。

我究竟做错了什么?我是否应该在某处添加需要 FSharp.Core 标记的提示?

注意:按照参考资料,您可以下载*.nuspec 文件以及找到git 存储库和 appveyor build

0 投票
1 回答
1708 浏览

visual-studio - 运行测试时无法加载文件或程序集 SpecFlow.Assist.Dynamic

我在 Visual Studio 2013 中有一个 CodedUI 测试项目。按照说明将 SpecFlow 与 CodedUI API 集成后,我在FeatureSetup(Assembly binding logging was enabled)中收到以下错误

测试名称:TheWelcomeScreen

测试全名:(...)Feature.TheWelcomeScreen

测试来源:c:\path\to\My.feature:第 6 行

测试结果:失败

测试时间:0:00:00

结果消息:类初始化方法 (...)Feature.FeatureSetup 引发异常。System.IO.FileNotFoundException:System.IO.FileNotFoundException:无法加载文件或程序集“SpecFlow.Assist.Dynamic,版本=1.0.2.0,文化=中性”或其依赖项之一。该系统找不到指定的文件。

结果堆栈跟踪:

packages.config的这个解决方案的文件:

在 SpecFlow.Assist.Dynamic DLL 的“属性”中,该CopyLocal设置设置为true. 构建解决方案后,该bin\Debug文件夹SpecFlow.Assist.Dynamic.dll在其中,但该文件夹中当前测试运行的TestResults文件夹不包含此 DLL。它确实包含以下 DLL:

  • 我的项目的 DLL
  • AutoMapper.dll
  • KellermanSoftware.Compare-Net-Objects.dll
  • TechTalk.SpecFlow.dll

我已经打开并关闭了 Visual Studio,卸载并重新安装了 NuGet 包,在本地删除了包源,清理、重建、重新启动、手动删除了bin\Debug文件夹并重新构建了......列表还在继续。我仍然遇到同样的异常。

0 投票
2 回答
1499 浏览

.net - 在 assemblyBindig/linkedConfiguration 元素中使用相对路径

我正在尝试将程序集重定向从web.config外部文件移动。其原因是我想将绑定重定向保留在一个地方并在调试和生产配置中使用它。

它有点工作,但我正在努力指定相对路径。

我想将它保存web.runtime.config在与 Web 应用程序的其余部分相同的文件夹中。是否可以在linkedConfiguration元素中指定相对路径?

更多信息:我已经在 VS 2015 中使用 IIS Express 和 ASP MVC 应用程序对其进行了测试。当使用 SysInternals Process Monitor 监视文件访问时,相对路径似乎解析为\\web.runtime.config(无效的网络路径),而使用绝对路径时没有\\添加前导.

0 投票
1 回答
3529 浏览

c# - 使用“探测”从不同目录加载 dll

编译具有外部引用的 C# 项目时,引用的 dll 被复制到项目的输出路径(exe 旁边)。

运行应用程序时,它希望在 exe 旁边找到 dll。

我正在寻找一种方法将我的 dll 文件传播到不同的目录 Dlls 以供初学者使用)。并让 exe 在这些目录中查找 dll 文件。

例子:

假设我们有一个名为“App”的应用程序位于 下C:\App\App.exe,并且它使用了一个名为“App.dll”的 dll 文件,该文件当前也位于C:\App.

我希望创建一个名为的新目录C:\App\Dlls并将 App.dll 文件移动到那里,同时确保 App.exe 文件知道在新位置查找 dll。

我搜索了互联网并找到了探测解决方案。这是我的代码(编辑过的“App.config”文件):

我编译了我的应用程序,创建了 Dlls 目录并将所有 dll 文件移动到该目录,但应用程序崩溃了。

我错过了什么?

0 投票
1 回答
603 浏览

c# - 无法加载文件或程序集“xxxLib”或其依赖项之一。坏图像格式异常

从我在不同帖子中读到的内容来看,这是一个与 32 位和 64 位应用程序相关的错误。但是,我所有的项目都是用 x64 构建的。

在此处输入图像描述

xxxLib, 是最近更新为 64 位的三个项目正在使用的旧库。它工作正常。直到我将它添加到WebSite项目中。

这是当前的装配负载跟踪:

LOG:此绑定在默认加载上下文中开始。

LOG:使用应用程序配置文件:

C:\Users\LuisLavieri\Documents\Visual Studio 2013\Projects\Website\WebSite\web.config

LOG:使用主机配置文件:

C:\Users\LuisLavieri\Documents\IISExpress\config\aspnet.config

LOG:使用来自的机器配置文件

C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config。

LOG:此时未将策略应用于引用(私有、自定义、部分或基于位置的程序集绑定)。

日志:尝试下载新 URL

file:///C:/Users/LuisLavieri/AppData/Local/Temp/Temporary ASP.NET Files/root/8500ede2/8446907/xxxLib.DLL。

日志:尝试下载新 URL

file:///C:/Users/LuisLavieri/AppData/Local/Temp/Temporary ASP.NET Files/root/8500ede2/8446907/xxxLib/xxxLib.DLL。

日志:尝试下载新 URL

file:///C:/Users/LuisLavieri/Documents/Visual Studio 2013/Projects/WebSite/WebSite/bin/xxxLib.DLL。

ERR:无法完成程序集的设置(hr = 0x8007000b)。探测终止。

所以,如果我没记错的话,它似乎是在尝试将机器配置文件用于 32 位应用程序,对吧?

它出现在这一行:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config。

如果这是问题所在,我该如何指出使用 64 位的解决方案?

谢谢

0 投票
1 回答
813 浏览

asp.net-web-api - MEF - 错误的程序集版本

我有一个使用 MEF、Webapi 和 OData 的 Web 应用程序。对于 MEF,我创建了一个按需加载目录的辅助类(首次访问时)

以下是 MEF 集成代码。

我的一个项目(实际的 Web 应用程序项目)使用以下 nuget 包(其中包括): WebApi 5.2.3 WebApi.OData 5.7.0

我的问题是,当 MEF 类尝试加载此程序集(使用 OData 和 WebApi 的程序集时,它引发了运行时错误,记录在下面。问题仅发生在生产机器上的部署中。在开发中一切正常。

正如您在下面的错误中看到的那样,似乎即使项目引用了 System.Web.Http 版本 5.2.3.0,在运行时 System.Web.Http.Odata 程序集也会尝试加载 System.Web.Http 版本5.2。 2.0 (!?!?!?)

在我的项目中,引用设置为正确的 dll(版本 5.2.3.0),dll 设置为Copy Local=True,并且在 web.config 我有

我在这个项目(程序集)中没有任何需要由 MEF 组成的类,所以我可以简单地将它排除在 MEF 加载之外,但是这个错误让我感到困惑,我想找到一个解决方案,以防万一我在其他程序集中遇到了类似的问题。

这是我得到的错误

0 投票
0 回答
527 浏览

.net - 无法加载引用 IL 程序集的 Microsoft.mshtml 的本机图像

问题

我有一个引用 Microsoft.mshtml 主互操作程序集的 WPF 应用程序。我正在使用 NGen 创建我的应用程序的本机映像。如果我启动我的应用程序,恐怕永远不会加载本机图像。

复制信息

例如,在 Visual Studio 中创建新的 WPF 应用程序“WpfApplication1”,添加对“C:\Program Files (x86)\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll”的引用,将 Embed Interop Types 设置为 false,设置特定版本为 false 并将 Copy Local 设置为 true。使用某种类型的 Microsoft.mshtml,例如实例化 mshtml.HTMLDocumentClass。构建应用程序后,从“c:\Windows\Microsoft.NET\Framework\v4.0.30319”运行 NGen,如下所示:

NGen 没有显示任何错误。启动我的应用程序后,我正在使用 vmmap 或进程资源管理器验证是否已加载本机映像。不幸的是,它们都没有显示创建的本机图像。

融合日志

所以我启用了融合日志查看器,这就是它告诉我的:

*组装活页夹日志条目(3/13/2016 @ 11:30:48 AM)*

手术成功。绑定结果:hr = 0x0。操作成功完成。

从以下位置加载的程序集管理器:C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll 在可执行文件 C:\Users\azureuser\Documents\visual studio 2015\Projects\WpfApplication1\WpfApplication1\bin\Release\WpfApplication1 下运行.exe
--- 详细的错误日志如下。

LOG:开始验证所有依赖项。
LOG:[Level 1]开始验证原生镜像依赖 mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089。
LOG:[Level 1]开始验证IL依赖PresentationFramework,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35。
LOG:[Level 1]开始验证 IL 依赖 WindowsBase,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35。
日志:[Level 1]开始验证 IL 依赖 System.Xaml,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089。
LOG:[Level 1]开始验证 IL 依赖 PresentationCore,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35。
LOG:[Level 1]开始验证原生镜像依赖系统,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089。
LOG:[Level 2]开始验证原生镜像依赖 mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089。
LOG:[Level 2]开始验证 IL 依赖 System.Configuration,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a。
LOG:[Level 2]开始验证 IL 依赖 System.Xml,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089。
本机映像具有正确的版本信息。
LOG:[Level 1]开始验证 IL 依赖 UIAutomationTypes,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35。
日志:[级别 1]开始验证 IL 依赖项 Microsoft.mshtml,版本=7.0.3300.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a。
警告:无法加载 IL 程序集。(小时 = 0x80131040)。
警告:未找到匹配的本机图像。
日志:从 C:\Users\azureuser\Documents\visual studio 2015\Projects\WpfApplication1\WpfApplication1\bin\Release\WpfApplication1.exe 加载的 IL 程序集。

评论

  • 如果我删除包含 mshtml 代码的 Microsoft.mshtml 引用,则会按预期加载本机图像。所以总的来说 ngening 在我的系统上工作。
  • 我已经在三种不同的操作系统上测试了这种行为,产生了相同的结果:Windows 7 Ultimate、Windows Server 2012 Datacenter 和 Windows 10。
  • 通过运行禁用负载验证sn.exe -Vr *,*不会改变行为
  • 由于实际从 GAC 加载的 Microsoft.mshtml 与“C:\Program Files (x86)\Microsoft.NET\Primary Interop Assemblies”(不同的证书)中的略有不同,我也尝试直接引用GAC 没有产生不同的结果
  • 通过运行将“C:\Program Files (x86)\Microsoft.NET\Primary Interop Assemblies”下的一个放入 GACgacutil -if也不起作用
  • 我使用针对 .net 4.5 的 VS2013 和针对 .net 4.6 的 VS2015 构建了这个应用程序
0 投票
1 回答
4535 浏览

c# - 绑定重定向被添加到每个 app.config

我在一个解决方案文件中有 20 个项目。其中 1 个项目是所有项目都引用的标准库项目。

大约一年前,我们添加了一个新的 nuget 包,我们将其命名为Package A5.0.0.0 版。它有一堆文件,当我们编译时它会到处传输,但我们最终处理了它。我们将包添加到我们的标准库项目(其他 19 个参考)。

我是 Nuget 的新手(所以也许我做错了什么),所以我制作了一个新包作为Package A. 我已经设置了所有内容,以便帮助程序依赖于Package A版本 3.0.0.0 到 5.0.0.0(因此它适用于版本低于我们的其他人)。让我们称这个新包Package A helper

我安装Package A helper并且一切正常。我去做一个拉取请求,我们解决方案中的每个 app.config 现在都有

如果没有它,它会编译得很好,但 Visual Studio 会抱怨并发出警告。是什么赋予了?我的经理现在不允许我合并我的代码,因为它在 app.config 中添加了太多的噪音并且过于依赖包 A。

为什么Package A在我们安装之前已经满足主要依赖项时添加依赖的nuget包然后必须有这个新的bindingRedirect Package A Helper

为什么当我在 nuget 包和 package.config 中指定 3.0.0.0-5.0.0.0 时它会说 0.0.0.0-5.0.0.0

更新:

当我Package A helper使用对版本 5.0.0.0 的引用进行构建时,Package A所有 bindingRedirects 都不会在每个 app.config 中自动填充,而是会生成警告。我最初使用 3.0.0.0 构建它,因为我认为最好以最低依赖性构建它。问题仍然存在,因为 Visual Studio 仍在警告并建议创建 bindingRedirects。

解决方案是否只是将我的 nuget 包依赖项从 3.0.0.0 更改为 5.0.0.0 并只允许 5.0.0.0 并摆脱allowedVersions="[3,6)"我的 packages.config?我不想降低我的 nuget 包的有用性和向后兼容性,但同时我不希望我的主要解决方案需要任何警告或 bindingRedirects。

更新 2:所以Copy Local在参考属性中设置以False实际解决我的问题,但我不明白为什么。