问题标签 [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.
.net - BindingRedirect 到不同的程序集名称
您可以使用BindingRedirect将 YourAssembly.dll 1.1.0.0 重定向到 1.2.0.0。
如果程序集名称不同,有谁知道是否可以这样做。
例如
YourAssembly1.dll (v1.1) 重定向到 YourAssembly2.dll (v2.8)
.net - 在 AssemblyResolve 方法中是否可以有额外的上下文?
动机。我有一个客户端-服务器应用程序。在某些时候,服务器端会根据某些元数据动态创建一个新类型,客户端无法使用。服务器需要向客户端发送该类型的实例。但是,客户端将无法反序列化实例,因为它的类型未知。
一种解决方案是将元数据和数据捆绑在一起,传输到客户端并让它重新创建动态类型和实例。
当特定实例深深嵌套在对象图中时,事情会变得一团糟。我想做的是将对象图按原样发送给客户端,让反序列化代码触发 AppDomain.AssemblyResolved 事件并在那里重新创建相应的动态类型。唉! 我不能这样做,因为我不知道如何使元数据可用于事件处理程序。
我尝试使用 CallContext,但它不起作用。
这是我用来寻找解决方案的完整示例代码,但我没有成功:
事件处理程序中返回data
的是.OnAssemblyResolve
null
有谁知道该怎么做?
编辑:可以在两次往返中进行 - 第一次传递元数据,第二次传递对象本身。我想找到一个往返解决方案。
编辑:2我想出了一个绝对疯狂的解决方案。它有效,但我想知道性能影响。如果我为每个动态类型只创建一个动态程序集并以该程序集的名称对类型的元数据进行编码会怎样?我检查了这种方法,它似乎有效。我得到了长达 500 个字符的程序集名称。每个程序集都定义了单个模块“DynamicModule”和单个类型 - “DynamicType”。我仍然期待更好的解决方案。
c# - Upgrade a reference dll in a C# project without recompiling the project
I need to take a built version of an C# application and change one of the reference dll's. What is the best way to do this, I have specific version turned off on the reference dll but as soon as I test replacing the dll with a newer version, I get the "Could not load file or assembly XXXXX, Version=XXXXX. Is there a way to stop the loader from caring about the version of the dll so the dll will just attempt to load?
.net - 为什么清单中包含引用的 DLL 的多个版本?
我正在使用面向 .Net 2.0 的 MSBuild v3.5 构建 .Net 解决方案。
我们正在升级以使用 Crystal 11.5,因此我更新了源代码控制树中的二进制文件以包含 11.5 版本的 DLL,而不是 10.0 的 DLL。
在项目中,我引用了一些 Crystal Reports DLL。这是项目文件的一个小示例:
但是,当我查看清单时,它显示 ClientDoc 被引用了两次,即使它不在项目中两次:
我尝试修改项目中的引用以指定版本 11.5.3300.0 并将 SpecificVersion 设置为 True。这些都没有帮助,我仍然得到一个引用两个版本的清单。
为什么这两个版本都包含在 Manifest 中?当所有其他 DLL 以相同的方式指定相同的提示路径时,为什么这只发生在 ClientDoc.DLL 上?
另外,如果这样发货,fusion会先尝试使用哪个版本?似乎在我们测试的一台机器上,我们可以发现没有找到版本 10.0.3000.0 的错误... 11.5 在机器上。在另一台机器上它似乎工作正常。
c# - 如何提供备用程序集而不是无法加载的程序集?
在运行时,如果引用的程序集无法加载,例如“强名称验证失败”(因为它是测试签名的),有没有办法从另一个真正签名的路径提供替换程序集?
我尝试订阅 AppDomain.CurrentDomain.AssemblyResolve,但它没有被解雇,因为技术上存在“坏”程序集,它只是无法加载。
当无法加载程序集时,是否有一种通用方法来提供后备程序集?
c# - 多个 Assembly.Load(Byte[]),相同的实例或泄漏?
当我使用包含相同程序集的 Byte 数组多次调用 Assembly.Load(Byte[]) 时会发生什么?
我会为每次调用获得相同的 Assembly 实例吗?
同一个程序集在应用程序域中多次加载???
.net - 加载程序集
有很多讨论显示如何从 BIN 和 GAC 加载程序集......我的问题更笼统,我很想知道程序集加载是如何工作的。
例如
在 BIN 文件夹中,我们可以拥有
A.dll.config 文件可能如下所示:
帮助我们设置正确的程序集参考。
我想知道如何创建一个需要 B.dll 但没有指定任何版本的 A.dll,所以如果总是采用 BIN 文件夹中的 B.dll。
我的问题是关于 SDK 的更新,我的所有代码仍然指向旧的 SDK 版本,我想让我的程序集查找资源的所有版本中最顶层的版本,BIN 或 GAC 并使用那个......
我怎么能在 Visual Studio 中这么说?我只能添加对物理文件(版本)的引用:-(
c# - C#:自定义程序集目录
假设我们有一个由一个可执行文件和 5 个库组成的应用程序。通常所有这些都将包含在一个目录中,并且将从那里加载库。
是否可以这样做,例如,我可以将一些库放在一个名为 Lib 的目录中,而将其余库放在一个名为 Lib2 的目录中?这样应用程序目录将只包含可执行文件本身,而其他程序集将包含在各种逻辑目录中。
我怎样才能做到这一点?而且我想知道如何加载程序集,还想知道如何使应用程序的构建将程序集放在正确的目录中。
.net - 重定向 NUnit 程序集版本的问题(什么是 [AssemblyName].temp.config?)
我正在使用 Sharp Architecture 的一些测试库,它们使用 NUnit 2.5.0,而我的项目的其余部分使用 NUnit 2.5.1,所以我在我的测试项目应用程序配置文件中放置了一个程序集重定向:
我仍然得到一个程序集重定向版本:
启用我的 Fusion ErrorLog 我看到了这个:
是什么赋予了?它要查找的 temp.config 文件是什么?为什么它不在我的实际配置中?
好吧,无论如何,我在构建后的事件中添加了以下内容:
一切都被复制得很好,但是一旦我用 Testdriven.NET 运行测试,文件就会消失。
谁能给我一个关于发生了什么的线索?
c# - 调试错误“类型 'xx' 在未引用的程序集中定义”
完整的错误如下:
“System.Windows.Forms.Control”类型是在未引用的程序集中定义的。您必须添加对程序集“System.Windows.Forms,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”的引用。
它指向不需要System.Windows.Forms
(或者我认为)的库项目中第一个类中的第一个语句(一个 Debug.Assert 行)。我知道如何解决它:添加提到的参考。但是我如何找出导致此错误的库,或者更好的是,使用 WinForms 库触发的代码的哪一部分?
通常,您可以添加引用其他库的库,但您只需要在实际使用这些其他库时添加对它们的引用。
编辑:替代解决方案
也可以使用Microsoft 框架工具中的Binding Log Viewer Fuslogvw.exe解决此问题或类似问题。它显示了您的应用程序绑定到的程序集的所有尝试和成功。