问题标签 [assemblyresolve]

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 回答
712 浏览

assembly-loading - 使用 AssemblyResolve 事件动态加载程序集随机失败

按照以下知识库文章的示例,我们实现了 AssemblyResolve 事件,以便将 .Net 指向正确的文件夹以从中加载程序集:http: //support.microsoft.com/kb/837908

这是我们当前的实现:

我们在所有批处理程序中都使用它,这些程序通常并行运行并且使用大部分相同的程序集。

批次会定期崩溃,留下以下痕迹:

[26/04/2013 12:35:01] AssemblyLoader:在“C:\COMPANY_Batch\MDS\Executables\MDS\FACADE\COMPANY.DistributieOrderFacade.dll”中找到程序集“COMPANY.DistributieOrderFacade.dll”

[26/04/2013 12:35:01] AssemblyLoader:程序集“COMPANY.DOCUMENTCENTERDOCS.dll”位于“C:\COMPANY_Batch\MDS\Executables\MDS\CLIENT\COMPANY.DOCUMENTCENTERDOCS.dll”

26/04/2013 12:35:01:在队列中创建 COMPANYDocument...:\rug.adroot\dfsroot\mds\Data\queue_new\ 26/04/2013 12:35:01

无法加载文件或程序集 'COMPANY.DistributeOrderBRDA,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null' 或其依赖项之一。一般异常(HRESULT 异常:0x80131500)

错误中的程序集确实位于 AssemblyLoader 搜索的文件夹之一中。如果我再次运行该程序,它确实会成功。

我试图通过在两个控制台应用程序中使用此程序集加载器并同时访问相同的 dll 来查看 dll 是否被锁定,但这似乎不是问题。

我还应该提到,这只是其中一批的日志。还有其他的,很少有相同的程序集没有被加载。

我不知道接下来从哪里开始寻找解决方案。

0 投票
4 回答
1816 浏览

c# - 处理 AssemblyResolve 事件后仍然出现异常 FileNotFound

我已经处理了AssemblyResolve-event 但我仍然得到一个FileNotFoundException. 我已经在类型初始化器中订阅了事件,并Assembly.LoadFromMain-method 中调用了该方法:

0 投票
0 回答
48 浏览

c# - C# Outlook 2007 插件 + 嵌入式程序集

我正在创建一个 Outlook 插件,并想看看我是否可以使用嵌入依赖的 DLL AppDomain.CurrentDomain.AssemblyResolve,但我不知道在哪里添加它,以便它实际上会被调用/触发:(

应该在哪个方法中订阅事件处理程序以便我可以加载程序集?

帮助!

0 投票
1 回答
771 浏览

c# - AssemblyResolve 事件处理程序与 CodeBase 策略

尝试从 C# 程序集访问程序集时,有几种方法:

  1. 实现AssemblyResolve事件处理程序 http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve(v=vs.110).aspx

  2. 使用 .config 文件中的属性重定向程序集请求

http://msdn.microsoft.com/en-us/library/system.resolveeventargs.name(v=vs.110).aspx中所述,对于 (1) 中事件的 ResolveEventArgs 属性:“名称是应用策略之前的程序集名称。”

但是,我找不到有关这些方法顺序的任何文档。在探测重定向之前是否调用了AssemblyResolve事件处理程序?还是反过来?

其次,是否有可能以某种方式将该政策应用于ResolveEventArgs? 例如从 .config 文件请求重定向的版本范围?

0 投票
1 回答
300 浏览

c# - 即使版本号错误,依赖程序集解析也会成功

我一直在寻找我在汇编决议中检测到的奇怪行为的答案,但无济于事。我知道 CLR 将程序集的引用记录到其元数据(清单)中。它记录名称、版本号、公钥令牌和语言环境。在加载程序集时,每个引用的程序集都会被探测和加载。这个探针是版本敏感的,或者换句话说,应该定位和加载构建中使用的相同版本,而不是任何其他版本。如果程序集被签名,公钥也会发挥作用。

问题是在我为测试创建的虚拟应用程序中,这条规则被打破了!我已经搜索过 SO 和 google 并且答案不正确。请不要给我以下原因,解决方法:

  • “特定版本”设置为 False:这仅在编译时为 true,与运行时无关。
  • 此外,没有应用程序/机器配置集。

在我的测试设置中,我有项目 A 引用项目 B。在对每个项目 B 进行版本控制后,我只构建自己而不是 A。现在我将具有更改版本的新 B.DLL 复制到 A 的工作目录并运行 A。它可以工作!!我预计它会崩溃。

Fuselogvw.exe 的输出应该是不言自明的。在日志中提到程序集应该寻找版本 9,但版本 8 已定位并加载!注意这一行:

日志:程序集名称为:dllProj,版本=1.1.10.8,文化=中性,PublicKeyToken=null

0 投票
3 回答
148 浏览

.net - VSTO AssemblyResolve issue

We develop a VSTO plugin for Word and we have the problem that the earliest entry point of the addin is the AddIn_Startup handler. The issue is that this handler is called too late for the AssemblyResolve handler we implemented to find the needed assemblies.

I sovled the problem by assigning the handler to the AppDomain.CurrentDomain.AssemblyResolve event in the Addins.Designer.cs class, but as you all know, this code is autogenerated.

Is there a way to assign the AssemblyResolve Handler sooner as in the AddIn_Startup handler and in a not autogenerated file?

0 投票
0 回答
93 浏览

c# - 来自另一个库的 AssemblyResolve 事件

我有一个引用某些库的 WinForms 项目。在我添加的那个项目的 main() 中

但它仅捕获可执行文件本身(此项目)调用的库。但是,该项目引用的这个库正在调用另一个库(通过 DllImport)并且这个“导入的库”试图找到一些库(不能说这个导入的库是如何不受管理的)但它无法在 PATH 中找到它们. 我想给它一个组装路径,但是,如上所述, main() 没有捕捉到这个事件。我该怎么做?

0 投票
0 回答
880 浏览

c# - .NET AssemblyResolve - 动态加载新的 .dll 版本

我有许多使用特定 .dll 程序集的 .NET WinForm 应用程序。推出此特定产品的公司偶尔会发布新版本。由于他们提供强名称程序集,我需要下载他们的 .dll 的新版本,而且还要检查我的每一个应用程序并参考新的 .dll 文件重新构建它们。然后,我需要部署我的每一个应用程序。执行此操作需要大量时间、文书工作和测试,因此我向此 .dll 的制造商询问了解决方法。

他们给了我这个 Stack Overflow 线程作为建议,并说它会“完美运行”。但是,我还没有完全弄清楚这一点。

在我的应用程序中,我已将其添加到 Program.cs:

为了使其正常工作,我必须在其默认位置删除/重命名普通产品 .dll 文件,并将新版本简单地放在根 C:\ 目录中(如代码所示)。从其正常位置删除 .dll 的原因是“AssemblyResolve”处理程序会触发,因为无法找到引用的程序集。

无论如何,使用上面的代码,我的应用程序给出了以下异常:“尝试从网络位置加载程序集,这会导致程序集在以前版本的 .NET Framework 中被沙盒化。这个 .NET 版本框架默认不启用 CAS 策略,...”等等。

我在这里到底做错了什么?有人甚至理解我想要完成的事情吗?我不敢相信以前没有这样做过,但在这一点上我有点不知所措。

任何帮助将不胜感激。谢谢你。

0 投票
0 回答
110 浏览

c# - 在 .net C# 中加载依赖 DLL,并获取引用程序集的路径

我正在使用下面提到的代码片段。但是代码库属性为null,那么我们从哪里可以获得路径?

0 投票
0 回答
234 浏览

c# - AppDomain.CurrentDomain.AssemblyResolve 问题

我有一个动态加载以下三个解决方案的应用程序

.

X.dll 包含一些 XAML(取决于我更改文本、背景和前景的 DLL 版本):

.

Z.dll 还包含一些使用 X.dll 的 XAML:

.

解决方案A 显示 X 版本 3 和 Z 版本 1(显示 X 版本 1)

解决方案 B 显示 X 版本 2

SolutionC 显示 X 版本 1

.

我想要的是始终使用更高版本的 Assembly,这意味着 SolutionA、SolutionB 和 SolutionC 必须始终使用版本 3中的X.dll

这是我用于 AssemblyResolve 的代码:

.

一切正常,直到我的控件名副其实

即(在 Z.dll 中):<Label Foreground="Black" Content="version 1" />变为<Label Foreground="Black" Content="version 1" x:Name="LabelV1" />

和(在 X.dll 中):<X:MainWindow x:Name="XMainWindow" />变成<X:MainWindow x:Name="XMainWindow" />

此时,SolutionA 出现异常,在 SolutionA 之前加载 SolutionA 时不显示(SolutionB 从来不是问题,只要在 SolutionA 之前加载 SolutionC,一切正常)。

我看到的是,当我附加到AppDomain.CurrentDomain.AssemblyLoad += CurrentDomain_AssemblyLoadXAML 时,它们会自动加载他们需要的程序集:

然后我在 xaml.cs 中看到以下异常:

以及 xaml 中的以下内容:

.

你有避免这个问题的线索吗?