问题标签 [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.
prism - MEF 程序集加载声明
在 Prism 中,我能够从动态加载的程序集中声明我希望加载程序集如何初始化我以及何时初始化。也就是说,我可以放置以下类属性:
[ModuleExport(typeof(MyModule), InitializationMode = InitializationMode.WhenAvailable)]
这将导致我的模块在加载时被初始化。
我一直在寻找对 MEF 执行相同操作的能力,但我对它还不是很熟悉。我尝试在 MSDN 和文档上四处搜索,但没有看到太多。
在此先感谢您的帮助!
.net - 是否可以在运行时创建绑定重定向?
应用程序启动后,是否有办法创建将应用于所有未来程序集加载的绑定重定向?
c# - C# - '资源' DLL 加载失败,因为它不存在 - 我如何找到引用以便删除它?
我有一个 C# 解决方案,它在编译时会吐出一个可执行的二进制文件。二进制文件依赖于一个库,该库是我编写的另一个解决方案的产品,所有相关代码都是我创建的。
最近,我以一种相当随意的方式玩弄了一些项目设置,试图了解 CLR 构建链接的工作原理。不幸的是(可以预见?)我已经设法破坏了我的二进制文件的链接,但我不确定如何解决这个问题。
- 当我的二进制文件在应用程序崩溃之前得到以下反馈
加载程序集........无法在程序集 MY.Library 中添加类型,版本=1.0.0.0,文化=中性,PublicKeyToken=null - 无法加载一种或多种请求的类型。检索 LoaderExceptions 属性以获取更多信息
- MY.Library.resources DLL 的融合日志如下。提到的二进制文件不存在,我不知道它在哪里或为什么要加载。
>
- “资源”DLL 是隐式的吗?还是我一定要引用这个 DLL?我应该如何在图书馆的 SLN 中找到参考资料?
TL;博士
- 如何删除对不存在资源 DLL 的引用?
webforms - PortableLibrary 无法加载文件或程序集
我有引用 PortableLibrary 项目的 asp.net 4 webforms 网站。在网站中,我对 PortableLibrary 中的类进行了序列化。当我使用 IIS6 将项目部署到网络服务器机器时,出现以下错误:
可移植库项目引用 System.Xml (v4.0.31029)。
当我尝试部署没有引用的干净项目时,只需对字符串对象进行简单的序列化,它就可以正常工作。
在 Web 配置中尝试了组装绑定,但没有成功。
为什么我会收到此错误?我不知道 system.xml 的“2.0.5.0”版本从何而来。
maven - 如何为不同的部署场景创建具有传递依赖关系的 Maven 程序集?
我在协调构建项目以在应用程序服务器中使用和用作独立应用程序时遇到问题。
为了给出一个整体简化的上下文,假设我有三个项目 A、B、C。
项目 A 依赖于项目 B,项目 B 又依赖于项目 C。
项目 C 有一个依赖项 X,它被标记为已提供,因为预计它将在应用程序服务器中作为 JEE 库提供。即jms.jar。
因此,如果我执行项目 A 的程序集构建,我会得到所有传递依赖项,除了那些标记为按预期提供的那些。
现在我有一个新的部署方案,项目 A 需要在独立环境中使用,即在应用程序服务器之外。
所以现在我需要 jms jar 作为编译依赖项。这是否意味着我应该在项目 A 中显式添加 X 的编译依赖项?这是否违反了得墨忒耳法则,即不要与陌生人交谈,从某种意义上说,项目 A 不应该明确知道项目 C,而只知道项目 B?
这是一个简单的示例,但实际上我有多个已标记为已提供但现在需要编译或运行时依赖项的依赖项,因此它们最终出现在 maven 程序集插件生成的工件中。
这是 Maven 的一个基本问题还是我没有正确使用这些工具?
提前感谢您的任何指导。
.net - 尝试在运行时通过 AssemblyQualifiedName 获取类型时的奇怪行为
尝试使用NetDataContractSerializer反序列化类型时收到 FileLoadException :
给定的程序集名称或代码库无效。(来自 HRESULT 的异常:0x80131047)
此错误与序列化程序无关;尝试在运行时通过其程序集限定名称加载类型会导致相同的失败。
我已将一个侦听器附加到AssemblyResolve 事件以查看发生了什么:
通过处理程序进行调试可以看到名义上的“奇怪行为”。虽然tryGet
从不null
(在这种情况下,所需的程序集总是加载到 AppDomain 中),但如果留给它自己 ,操作总是会失败。换句话说,调用 编辑:我将程序集的强名称与类型的程序集限定名称混为一谈;请忽略那个错误。具有讽刺意味的是,它并没有引发不同的错误,所以在问这个问题之前我没有发现这一点。Type.GetType(e.Name).Assembly
会导致 FileLoadException 被抛出。
另一点信息: Assembly.Load(e.Name)
总是返回有效的程序集。我不确定为什么这有效,而反序列化期间在幕后使用的方法失败了。
Fusion Log 报告加载程序正在尝试加载正确的程序集,但由于在可执行文件的私有路径中未找到该程序集,因此它失败了。
为什么在 AppDomain 中已加载程序集时尝试加载程序集?
有关融合记录的更多详细信息...
我已经在方法调用之前和期间捕获了所有导致引发异常的程序集加载。以下是相关日志,按创建顺序排列:
- 部分绑定失败
- 尝试仅按名称加载程序集
- 只探测了应用程序库
- 通过 LoadFrom SUCCEEDED 进行部分绑定
- where-ref 绑定。位置指向文件被引用的位置
- 我相信 VS 在解决方案中加载引用时使用 LoadFrom
- 强名称绑定失败
- 未知是什么触发了此加载尝试
- 只探测了应用程序库
AFAICT,Visual Studio 将程序集加载到解决方案的 AppDomain 中(我希望 Fusion Log 捕获尝试加载的 AppDomain;毕竟它记录了调用程序集)。
在此之后,我进行了反序列化调用。结果是 Fusion 中的单个日志:
绑定结果:hr = 0x80070002。该系统找不到指定的文件。
同样,Fusion 正在尝试通过其强名称从可执行文件的应用程序库中加载。一件好事;它尝试从 GAC 加载,因此一旦部署,我可能不会遇到同样的问题。但我仍然不知道为什么程序集不能位于 appdomain 中。
更多有趣的东西......
这引发了对反序列化的调用:
其中 ToXml 和 FromXml 都使用 NetDataContractSerializer 和 Write/ReadObject。程序集在执行早期从包的安装目录加载,但 NDCS 出于某种原因不想使用在 AppDomain 中找到的程序集。该测试表明它不会是版本控制的问题。
c# - 反序列化具有在 AssemblyResolve 上加载的其他程序集中声明的类型字段的对象时出错
我有一个应用程序,它在自身内部嵌入(通过 BuildAction:Embedded Resource)引用的程序集(称为 ClassLibrary1)并将其加载到 AppDomain.CurrentDomain.AssemblyResolve 事件中。主程序集定义了一个类 Class1:
它具有在 ClassLibrary1 中定义的 Class2 类型的属性。Class2的定义:
在主要方法中,我正在创建一个新的 XmlSerializer(typeof(Class1)):
执行程序时出现以下错误:
无法生成临时类(结果=1)。错误 CS0012:“ClassLibrary1.Class2”类型在未引用的程序集中定义。您必须添加对程序集“ClassLibrary1,Version=1.0.0.0,Culture=neutral,PublicKeyToken=c06f123f2868e8c8”的引用。错误 CS0266:无法将类型“object”隐式转换为“ClassLibrary1.Class2”。存在显式转换(您是否缺少演员表?)
有任何想法吗?
其余代码:
更新:在 microsoft Connect 站点上创建了一个BUG 。您还可以从那里下载一个示例 visual stuido 2010 解决方案(只需展开详细信息字段组)以重现它。
.net - .NET 程序集绑定
我有一个 API MyApi,它由应用程序 MyApplication 使用。
MyApi 有几个针对 .NET 4.0 客户端配置文件的 dll。例如:
- MyApi.Core
- MyApi.Domain
- MyApi.Providers
(还有更多)
为了部署简单,这些被ILMerged到
- MyApi.ClientProfile
所有 MyApis dll 都是强命名的。
MyApplication 中的所有项目都引用了 MyApi.ClientProfile。
我现在正在向 MyApi 添加一些 Web 功能,因此我添加了一个针对 .NET 4.0 扩展配置文件的 dll MyApi.Web。MyApi.Web 引用 MyApi.Core 和 MyApi.Domain(以及 System.Web dll)。
现在还有一个 MyApplication.Web 项目。它引用了 MyApplication 中的一些其他项目(其中引用了 MyApi.ClientProfile dll)。MyApplication.Web 项目需要引用 MyApi.Web dll。
我怎样才能做到这一点?
如果我从 MyApplication.Web 添加对 MyApi.Core 和 MyApi.Domain 的引用,那么 MyApplication.Web 的多个程序集中将存在类型。
如果我不从 MyApplication.Web 添加对 MyApi.Core 和 MyApi.Domain 的引用,MyApi.Web 将无法加载,因为它找不到 MyApi.Core 或 MyApi.Domain(因为只有 MyApi.ClientProfile 存在)。
我无法处理程序集解析事件并将对 MyApi.Core/MyApi.Domain 的请求重定向到 MyApi.ClientProfile,因为 MyApi 程序集都是强命名的,这将使其失败。
我无法将 MyApi.Web 合并到 MyApi.ClientProfile 中,因为 .NET 4.0 客户端配置文件应该支持 MyApi.ClientProfile(并且 MyApi.Web 引用了 System.Web 等)。
如果我将 MyApi.Web 更改为引用 MyApi.ClientProfile,这应该适用于这种情况,但并不理想,因为它不适用于直接引用 MyApi.Core 和 MyApi.Domain 的另一个应用程序。
我不想强制 MyApplication.Web 在其配置中指定 bypassTrustedAppStrongNames (认为直接从 MyApi.Web 以某种方式启用此设置可能是一个可接受的选项......)。
所以,我一直在想一个合适/优雅的解决方案来解决这个问题。
有什么建议么?
谢谢。
.net - 如何将 .NET 3.5 和 .NET 4.0 程序集添加到 FxCop 代码分析?
我想分析一个解决方案,其中包含面向 .NET 3.5 SP1 的项目和一些其他面向 .NET 4 的项目,这些项目对 .NET 3.5 库有一些依赖关系。
当我尝试添加两个程序集时,一个用于 .NET 3.5,另一个用于 .NET 4,FxCop 抛出异常:
有没有办法告诉 FxCop 只使用 4.0.0.0 版本?
asp.net - 根据进程位数使用 32 位或 64 位特定 dll
我需要引用一个 DLL,它有 2 个版本(一个用于 32 位,一个用于 64 位)。我的目标是构建一个适用于 32 位和 64 位系统的 Web 应用程序。
我考虑过默认引用32位程序集并使用AssemblyResolve事件加载64位版本(如果加载32位版本失败):
但即使发生 BadImageFormatException,也不会调用 _AssemblyResolve 处理程序。有没有其他方法可以实现建议的行为?