Tag: fusion

TypeLoadException表示“没有实现”,但它已实现

我的测试机器上有一个非常奇怪的错误。 错误是: System.TypeLoadException: Method ‘SetShort’ in type ‘DummyItem’ from assembly ‘ActiveViewers (…)’ does not have an implementation. 我只是无法理解为什么。 SetShort存在于DummyItem类中,我甚至重新编译了一个带有对事件日志的写入的版本,只是为了确保它不是部署/版本控制问题。 奇怪的是调用代码甚至不调用SetShort方法。

手动加载从属程序集

我有一个项目,使用Assembly.Load或Assembly.LoadFile加载同一程序集的多个版本。 然后,我使用Assembly.CreateInstance从该特定程序集创建一个类型。 这很有效,直到我创建的类型引用另一个依赖程序集。 我需要一种方法来拦截这个特定程序集的请求,以加载另一个程序集并为其提供正确的版本(或更好的探测路径)以查找其依赖项。 这是必需的,因为我使用Assembly.CreateInstance创建的程序集的v1和v2通常也需要不同版本的依赖程序集,但默认情况下,v1和v2都将探测相同的目录。 我已经看到了如何一般地为AppDomain做的示例 ,但是我需要以处理来自特定根程序集的所有分辨率的方式执行此操作。 假设我做了类似的事情: AppDomain.CurrentDomain.AssemblyResolve += delegate(object sender, ResolveEventArgs args) { //Use args.RequestingAssembly to determine if this is v1 or v2 based on path or whatever //Load correct dependent assembly for args.RequestinAssembly Console.WriteLine(args.Name); return null; }; 这可能适用于我的目标程序集立即引用的依赖项,但这些依赖项引用的程序集又如何呢? 如果v1引用了Depv1,它本身引用了DepDepv1,我需要能够知道这一点,所以我可以确保它可以正确地找到它们。 在那种情况下,我想我需要以某种方式跟踪这个。 也许通过添加自定义程序集证据 – 虽然我无法使其工作,并且似乎没有任何“程序集元数据”属性,我可以在运行时添加。 如果我可以简单地指示特定程序集从特定目录加载其所有依赖项,那将会容易得多。 更新 我设法使用AssemblyResolve事件根据RequestingAssembly的路径加载依赖程序集,但它似乎是一个有缺陷的方法。 似乎使用哪个依赖程序集版本完全取决于首先加载哪个版本。 例如: 加载v1 加载v2 参考v1导致Depv1的加载 参考v2导致Depv2的加载 […]