问题标签 [assembly-resolution]

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 投票
1 回答
686 浏览

asp.net-mvc - 为什么 Combres 仍在寻找旧版本的 System.Web.Mvc?

我将Combres与我的 MVC 3 RC 项目一起使用,当我将它部署到我的 Web 服务器时出现程序集绑定错误。

System.IO.FileLoadException
无法加载文件或程序集 'System.Web.Mvc, Version= 2.0.0.0 , Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

<%= Html.CombresLink("commonJs") %>

我的开发机器在 GAC 中有 MVC 1 和 2 程序集,所以在那里可以正常工作。Web 服务器在 GAC 中没有任何版本的 MVC,我正在对 MVC 3 程序集进行 bin 部署。我的项目引用了 System.Web.Mvc 的 3.0.0.0 版本,并且我的 web.config 中有以下部分:

我认为本节将告诉 Combres 使用 3.0.0.0 版本。为什么我的应用程序无法解析引用?

0 投票
2 回答
9704 浏览

.net - 如何从 web.config 引用程序集?

我需要在 web.config 中添加对“System.XML.dll”程序集的引用(为了尝试解决问题,这里提到:扩展方法的问题:IXmlLineInfo)。

我试图将以下行添加到“程序集”部分:

这导致了一个错误:

说明:处理服务此请求所需的配置文件期间发生错误。请查看下面的具体错误详细信息并适当地修改您的配置文件。

解析器错误消息:无法加载文件或程序集“System.Xml,版本=2.0.5.0,Culture=neutral,PublicKeyToken=7cec85d7bea7798e”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

老实说,我不确定是否正确指定了 version/Culture/PublicKeyToken。

我有几个不同版本的 System.XML.dll:

  • C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v3.5\Profile\Client\System.XML.dll
  • C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\Profile\Client\System.XML.dll
  • C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.XML.dll
  • C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v3.0\System.Xml.dll
  • C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\System.Xml.dll

此外,我在框架、框架 x64 等中的 GAC 中有一些程序集......

问题1:

我需要哪个组件?

问题2:(已过时)

如何确定确切的程序集版本和 publicKeyToken?

PS有趣的事情,当我发布问题时,我发现已经有一个'publickkeytoken'标签并且它包含问题2的答案:)

非常感谢!

0 投票
4 回答
1316 浏览

asp.net - 我的 ASP.NET 应用程序中的程序集加载错误,甚至不再引用程序集

我有一些引用 Noesis.Javascript 程序集 (http://javascriptdotnet.codeplex.com) 的代码,并将 Noesis.Javascript.dll 重命名为 Noesis.Javascript.0.4.dll。我通过 Visual Studio 引用了这个文件,当我在 ASP.NET 开发服务器中启动我的 Web 应用程序时,我收到了这个错误:

无法加载文件或程序集“Noesis.Javascript.0.4”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

然后我尝试删除此引用并重新引用旧版本的库。我得到了同样的错误。然后我尝试完全删除这个引用并注释掉所有使用这个库的代码。我仍然得到同样的错误。我试图从系统托盘中的图标中显式关闭 ASP.NET 开发服务器,但这仍然会发生。我现在在我的项目中的任何地方都找不到这个程序集的引用,但错误仍然存​​在。可能会发生什么?是否有一些我没有找到的缓存?如何解决此错误?

0 投票
3 回答
2335 浏览

.net - AssemblyResolve 总是被提出,要求 MyAssembly.resources

我有一个 WPF 应用程序,并且我订阅了事件AppDomain.AssemblyResolve(只要运行时找不到程序集,就会引发此事件),我注意到它被调用了好几次,试图解析 MyAssembly.resources,其中 MyAssembly 是当前执行装配。它还对我从 MyAssembly 引用的库程序集提出了同样的要求(它要求 Library.resources)。

这是正常的吗?我如何解决它?我的申请确实有问题。它无法加载位于库中的某些 xaml 用户控件。这有关系吗?

0 投票
2 回答
393 浏览

.net - 发现哪些程序集正在加载哪些依赖项(在运行时)

发现哪个程序集触发在运行时加载某些依赖项的最简单方法是什么?在作为我们应用程序的一部分加载的 100 多个程序集之一中,我在某处有一个旧程序集的杂散引用。

使用FUSLOGVW我可以看到正在加载的旧程序集 - 但日志没有告诉我是哪个程序集导致它加载。我使用了 CheckASM,它允许我浏览主程序集的依赖关系,并沿着树向下探索——但这些都很好。

所以它必须是在运行时动态加载的程序集,或者某个地方的配置文件。但我一辈子都找不到它。

想知道是否有更聪明的方法来做到这一点?

0 投票
3 回答
234 浏览

c# - 获取程序集所需的程序集?

X.dll在我的程序中加载一个程序集,X.dll可以是任何东西,我创建了一个类的实例X.A_Class。但是,如果程序集需要X程序集AB和怎么办? 我如何检测到这一点? 如何加载它们而不将它们保存在变量中?CD

0 投票
1 回答
6616 浏览

c# - CurrentDomain.AssemblyResolve 无法解析“某些”程序集

找到答案后,我关于程序集解析的最后一个问题(AppDomain.CurrentDomain.AssemblyResolve 要求 <AppName>.resources 程序集?)现在我可以在我的程序中嵌入引用程序集,除非这对某些引用不起作用。

首先,我在 Program.cs 的第一个入口处设置了我的程序集解析器

这是我的实际解析器;

现在我的程序引用了这些库程序集。

  • Esent.Collections.dll
  • Esent.Interop.dll
  • HtmlAgilityPack.dll
  • Ionic.Zip.Reduced.dll
  • System.Windows.Forms.Calendar.dll
  • AxInterop.ShockwaveFlashObjects
  • Interop.ShockwaveFlashObjects
  • irrKlang.NET4.dll
  • ikpMP3.dll
  • Nini.dll(已解决)

上面有我的解析器;我可以嵌入 Esent.Collections、Esent.Interop、HtmlAgilityPack、Ionic.Zip.Reduced、System.Windows.Forms.Calendar、AxInterop.ShockwaveFlashObjects、Interop.ShockwaveFlashObjects 并在运行时解决这些问题。

问题出现在 irrKlang.NET.4、Nini 和 ShockwaveFlash 程序集中,如果我尝试嵌入这些程序集并尝试在运行时解决它们,我就会遇到问题。

对于 irrKlang,我可以理解这个问题,因为 irrKlang.NET4 程序集引用了我自己无法找到的非托管 ikpMP3.dll。

对于 Nini.dll,实际上我可以嵌入这个程序集并使用运行的 VS 调试/发布配置它工作正常,但是当我从资源管理器自己启动程序时,程序只是拒绝启动(没有错误或任何一点信息)。

任何帮助表示赞赏。

现在更新 ,感谢 Marc Gravell 的回答,我可以加载 Nini.dll。

对于 irrKlang 部分,由于 irrKlang.NET4.dll 是一个托管程序集,它需要 ikpMp3.dll - 一个非托管程序集 - 如果我尝试在运行时解析 irrKlang.NET4.dll,它可以访问其所需的依赖项 ikpMp3。有解决办法吗?

0 投票
2 回答
10621 浏览

c# - 解决程序集的异常:尝试使用修正加载无法验证的可执行文件

我将所需的程序集嵌入到我的项目中,并在运行时使用AppDomain.CurrentDomain.AssemblyResolve事件解决它们。

除了irrKlang的 .net4-wrapper 之外,一切正常,如果我尝试这样做会引发异常;

基本上我怀疑 CLR无法使用 Assembly.Load(byte[]) 加载混合模式程序集,但我不确定。

我找不到与异常消息相关的任何内容;

尝试使用修正加载无法验证的可执行文件(IAT 具有超过 2 个部分或 TLS 部分。)

帮助表示赞赏。

0 投票
2 回答
27498 浏览

c# - 解析来自另一个文件夹的程序集引用

我正在开发一个应用程序,它引用和使用来自某个供应商的一些第三方程序集;在开发框中,我在源代码树的引用文件夹中有这 3 个程序集,我可以引用它们并构建应用程序,应用程序构建但不运行,因为没有安装整个服务器应用程序,但这很好。

在我要复制此自定义应用程序并运行我引用的所有程序集的服务器上,文件夹中的内容如下:

如果我将我的小可执行文件复制到该文件夹​​中并运行它,它会完美运行,但是如果我将 .exe 放在我想要的更合适的文件夹中:

它不起作用,因为它无法解析这些程序集。

我知道我可以在 app.config 中使用探测来指定我的 exe 必须在哪些文件夹中查找引用,但如果程序集不在子文件夹中,更多的是在完全不同的位置。

我不想复制我的应用程序文件夹中的所有供应商程序集,我不能只放我引用的 3 个,因为它们也在加载其他程序集,除非我拥有所有这些程序集(很多......),否则它不会工作。

我没有做任何特别的事情,没有创建应用程序域,也没有通过反射加载程序集,只是希望 CLR 在应用程序启动或执行时解析引用。

谢谢。

编辑:这里是最终的工作代码

0 投票
2 回答
225 浏览

.net - 如果仅存在 .NET 2.0 RTM,运行时如何解析对 .NET 2.0 SP1 程序集的调用

我们在安装了 .NET 2.0 SP1 的机器上针对 .NET 2.0 构建了应用程序。System.Xml.dll该应用程序引用了一些包含在 .NET SP1(即)中的标准 .NET 程序集。

如果我们在具有 .net 2.0 RTM 的计算机上运行此应用程序,该应用程序运行良好,它甚至使用System.Xml.dll汇编。但是,当它尝试使用 2.0 RTM 中不存在但 2.0 SP1 中存在的方法时,应用程序会抛出MethodNotFoundException

我的问题是:运行时如何解析 System.Xml.dll?

程序集版本的修订号不同(但主要、次要和构建部分是相同的)。这意味着 2.0 RTM 和 2.0 SP1 程序集在程序集绑定过程方面是不同的。运行时应尝试查找 System.Xml.dll 2.0.50727.1378,但它只能找到2.0.50727.42. 然后程序集绑定过程应该失败,因为 Machine.config 中不能有任何发布者策略或重定向。但绑定工作正常。怎么可能?

上述问题之后的另一个问题。

我们不能强制所有客户在他们的计算机上安装 .NET 2.0 SP1。如果我们从 .NET 2.0 SP1 发布 System.Xml.dll,我们如何强制我们的应用程序使用我们的应用程序附带的 System.Xml.dll?

更新 1:看起来 System.Xml.dll 版本是 2.0.0.0,而不是 2.0.50727.x。这描述了运行时成功解决它的原因。但第二个问题仍然适用:我们能否将 SP1 中的 System.Xml.dll 与我们的应用程序一起发送并强制我们的应用程序使用它?