问题标签 [assembly-loading]

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

asp.net - 尝试绑定配置:无法加载 System.ComponentModel.TypeConverter

我正在尝试在控制台应用程序中使用 ASP.NET Core 配置(特别是 Microsoft.Extensions.Configuration.Json)。当我调用IConfigurationRoot.Bind()它时,它会引发FileNotFound程序集异常System.ComponentModel.TypeConverter

据我所知,在SystemTypeConverter程序集中的System.ComponentModel命名空间中,而不是虚构的程序集。System.ComponentModel.TypeConverter

这似乎是一个错误。还是我错过了什么?

我的目标是 .NET 4.5.2,已引用System并安装了以下 NuGet 包:

是否有解决方法或其他步骤?

这也不起作用:

我的 JSON 是代表字符串属性还是诸如TimeSpan.

0 投票
0 回答
368 浏览

c# - 插件的 Autofac xml 配置

为了更好地理解如何将 Autofac 与 json/xml 配置一起使用,我正在创建一个支持插件的小型示例应用程序。该解决方案包含以下程序集:(1) BusinessLogic.Interfaces、(2) BusinessLogic1、(3) BusinessLogic2、(4) DependencyInjection 和 (5) 视图。后者是一个简单的 Winforms 程序集,我可以使用它来测试应用程序。

程序集“BusinessLogic.Interfaces”仅包含一个接口 IFoo。这两个 BusinessLogic 程序集都只包含一种类型,Foo,它们都实现了 IFoo。有了这个设置,我可以配置 DI 容器来给我一个合适的 IFoo 实现。按照Autofac 站点上的文档,我得到以下用于读取配置文件的代码

具有以下配置

在类 DependencyInjection.DiContainer 中,我使用

当程序集视图链接到 BusinessLogic1 和 BusinessLogic2 时,此代码有效。在 json 文件中,我可以轻松更改要使用的实现。

如果我从视图程序集的引用中删除 BusinessLogic2,我会遇到问题。我在命令“builder.Build()”上得到一个 InvalidOperationExecption。这是合理的,因为请求的类型位于尚未加载的程序集中。因此我使用反射加载程序集。按照本教程,我添加了以下方法

现在,在 main 方法中,我首先调用方法 LoadAddons,然后调用 CreateBuidlerFromConfigFile。在 Visual Studio 的模块视图(调试 -> Windows -> 模块)中,我看到 BusinessLogic2 已加载,但仍然存在 InvalidOperationException。

编辑异常消息是:“Autofac.Configuration.dll 中发生'System.InvalidOperationException' 类型的未处理异常附加信息:找不到类型'BusinessLogic2.Foo,BusinessLogic'。它可能需要装配资格,例如“MyType , MyAssembly”。如何告诉使用 xml/json 配置的 Autofac 注册一个动态加载的类型?

0 投票
3 回答
2469 浏览

asp.net - 无法加载文件或程序集“Magick.NET-x86.DLL”或其依赖项之一。指定的模块无法找到

我已经看到了Harsh Gupta 的票“无法加载文件或程序集 'Magick.NET-x86.DLL' 或其依赖项之一”,我遇到了同样的问题,但没有这些解决方案适合我。

我有一个包含 ImageMagick 的 Web 应用程序,它新安装在新的 Windows Server 2012 实例上(我们正在从 Windows Server 2008 R2 实例迁移到该实例)。该应用程序在 Server 2008 和本地运行正常,但在 Server 2012 上运行不正常。

我在将 Magick.Net 从 6.8.7.502 升级到 7.0.7.300 后重建了项目,希望7.0.6 中引入的自述文件中提到的 .Net Standard / .Net Core 支持能够解决我的问题,但是徒劳无功。在此之前,我还安装了 VC++ 2012 和 2015,正如 Harsh Gupta在他们接受的答案中提到的那样。

尽管如此,我仍然收到“HTTP 错误 500.0 - 内部服务器错误”页面,告诉我:

模块: AspNetInitializationExceptionModule
通知: BeginRequest
处理程序: ExtensionlessUrlHandler-Integrated-4.0
错误代码: 0x00000000
请求的 URL: [已编辑]
物理路径: [已编辑,但正确]
登录方法:尚未确定
登录用户:尚未确定

事件日志显示来自 ASP.NET 4.0.30319.0 的警告事件,事件 ID 为 1310 和以下堆栈跟踪:

查看 webroot,该bin文件夹确实包含 Magick.NET-x86.dll(以及 Magick.NET-Q16-x86.dll 和 Magick.NET-Q16-x86.Native.dll),并且该IIS_IUSRs组确实具有对这些的读取权限DLL(以及所有其他)。

虽然它是 64 位服务器,但 AppPool 确实将Enable 32-bit applications设置为True。将 AppPool 的托管管道模式集成更改为经典也没有效果。但是,我确实注意到,AppPool 的应用程序数量被列为零(尽管网站的高级设置对话框显示了正确的 AppPool 名称): AppPools 截图

我完全不知所措,我们现在在迁移此应用程序方面落后于计划,因此我们将不胜感激地收到任何建议。

谢谢!

编辑添加:在 Github 上的票 #107 上有更多信息。

0 投票
1 回答
1173 浏览

c# - 无法加载文件或程序集 System.Xml.XPath - .Net 4.6.2 引用 .Net Standard 1.3

我正在使用 VS2017 开发应用程序C#.Net Framework 4.6.2.

我有一个类库,我为它安装了Geocoding CoreGooglenuget 包。那些是Net Standard 1.3图书馆。

这增加了对其他几个库的依赖,以及System.Xml.XPath.

虽然,在运行时,当我尝试访问其中一种Geocoding.net方法时

我收到这个错误

我不知道该怎么做。System.XML.XPath 文件位于输出文件夹中。

我尝试添加程序集绑定重定向:

和这个

似乎没有任何效果。我总是收到这个错误。

这是带有绑定重定向的融合日志:

这是没有绑定重定向的融合日志:

0 投票
0 回答
106 浏览

c# - 当在 AppDomain 中动态加载程序集时,Type.GetType 返回 null

我有一个名为的程序集MyAssembly.dll,它是使用动态加载的

我想获取Typefrom string(class name as string) 中存在的MyAssembly,但显示不一致的行为。

有时会给出我想要的正确类型(类类型),有时会给出null

当类型为空时,我已经检查了AppDomain使用的程序集

它显示MyAssembly在 AppDomain 中加载。

我不明白为什么会这样。

0 投票
6 回答
20174 浏览

c# - 无法加载文件或程序集“Microsoft.VisualStudio.TestPlatform.ObjectModel,版本=11.0.0.0”

我正在使用 MSTest.TestAdapter 和 MSTest.TestFramework 1.2.0 版本进行我的 MS 测试单元测试。在我的本地机器(Visual Studio 2017)上,测试运行完美,但在我们的构建服务器上,我们收到以下消息:

无法加载文件或程序集“Microsoft.VisualStudio.TestPlatform.ObjectModel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。该系统找不到指定的文件。

然后我用 ildasm 检查了这个程序集的引用,确实是 11.0.0.0 版本(见下文)

但是我找不到这个程序集的 v11,网上只有 nuget 上的 v14 版本:https ://www.nuget.org/packages/Microsoft.VisualStudio.TestPlatform.ObjectModel/

我也在我的机器上搜索过,我找不到v11。

所以我的问题是,为什么测试在我的机器上而不是在构建服务器上运行?

我尝试了程序集绑定但没有成功。

在此处输入图像描述

0 投票
0 回答
961 浏览

c# - ASP.NET Core 2.0 Assembly.Load - System.Reflection.ReflectionTypeLoadException

我有一个包含 ASP.NET Core 项目和 Windows 服务项目以及数据访问和业务 dll 的解决方案。我使用 autofac 进行依赖注入。在 windows 服务项目中,我加载包含 autofac 模块的 dll,如下所示:

模块已正确注册,一切正常。但是,如果我在 ASP.NET Core 应用程序中执行相同操作,程序集会加载以下异常并且模块未注册:

我尝试将 Assembly.Load 方法包装到 try catch 块中,但没有捕获到异常。我究竟做错了什么?

0 投票
1 回答
2390 浏览

c# - 程序集加载失败,没有融合日志错误

我有一个非常小的控制台应用程序,它只是试图从引用的程序集中打印出枚举的值。我们将程序集称为“VendorAssembly.DDK.dll”,并说它定义了“Vendor.Namespace”。这是我的匿名测试代码。IntervalType 只是一个枚举。

它编译得很好。

但是当我尝试运行它时,立即发生异常(在实际输入 Main() 方法之前),它说:

System.IO.FileNotFoundException 未处理 消息:mscorlib.dll 中发生“System.IO.FileNotFoundException”类型的未处理异常附加信息:无法加载文件或程序集“VendorAssembly.DDK.dll”或其依赖项之一。指定的模块无法找到。

即使我多次尝试运行此应用程序,fuslogvw.exe 也没有列出任何绑定错误。将 fuslogvw.exe 设置为“记录所有绑定到磁盘”并启用自定义日志路径,搜索自定义融合日志文件夹会显示一个绑定事件,这显然是成功的?

VendorAssembly.DDK.DLL 是一个托管包装器,它调用非托管 C++ 代码。在 Visual Studio 程序集资源管理器中查看 VendorAssembly.DDK.dll 表示它引用了mscorlibSystemSystem.Configuration.InstallSystem.DataSystem.XmlKernel32.dll. 我还添加了所有列出的 .NET 程序集作为对控制台应用程序的引用。

我的控制台应用程序针对 x64 平台和 .NET 4.5.1,它与 VendorAssembly.DDK.dll 上的元数据完全匹配。

我需要做什么才能让这个程序集正确加载?

为什么 fuslogvw 不显示出了什么问题?

0 投票
0 回答
36 浏览

c# - CLR 程序集加载

在尝试调试一些项目加载问题时,我一直在阅读和试验程序集。我想澄清一些关于程序集加载的问题。

我正在使用两个项目测试 Common.Logging 库 - 应用程序和库。应用程序使用 2.1 版本,而库使用 1.2。应用程序能够很好地运行和加载库,我观察到它通过检查 AppDomain 事件加载了 2.1 版本。App 引用 1.2 和 Library 引用 2.1 的相反情况导致运行时文件加载异常。

我的问题是,为什么在第一种情况下加载程序集?我希望有一个例外,就像第二种情况一样。如果 2.1 版本不向后兼容怎么办?是否完全取决于作者始终保留,或者他们可以以某种方式指定在需要 1.2 时不能使用 2.1?

0 投票
0 回答
811 浏览

c# - C# Assembly Load 加载错误的程序集

我已经看到有关动态加载程序集的问题

基本上,我想做三件事:

1)动态加载用户选择(托管)的程序集

2)修改程序集(在程序本身中)

3)用新的替换加载的程序集

下面的代码加载正确的程序集:

但是,据我所知,要替换文件,我首先需要卸载它以删除文件句柄。所以我尝试AppDomain使用下面的代码加载文件:

这将开始在应用程序启动路径中搜索程序集,而不是在assemblyPath. 如果未找到,则给出 FileNotFound Exception。我也使用 Process Explorer 验证了这一点:它还显示了正在加载的启动路径中的程序集

也没有卸载程序集。

我究竟做错了什么 ???