在 .NET 中动态添加引用

Posted

技术标签:

【中文标题】在 .NET 中动态添加引用【英文标题】:Adding references dynamically in .NET 【发布时间】:2013-10-24 07:00:23 【问题描述】:

我有两个 dll (sqlite),一个 dll 是 64 位,另一个是 32 位 dll。是否可以根据处理器架构动态添加参考? P/Invoke 是我最后的选择。任何帮助将不胜感激!

示例代码:

string pathToDll = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\x64\\System.Data.SQLite.dll";
Assembly assembly = Assembly.LoadFrom(pathToDll);
AppDomain.CurrentDomain.Load(assembly.GetName());

【问题讨论】:

Conditionally use 32/64 bit reference when building in Visual Studio的可能重复 也许对你有帮助。 ***.com/questions/3832552/… 人们可能希望编译为任何架构并在 32/64 上运行。当然你可以通过好的安装程序来解决这个问题,但这可能不是重复的 【参考方案1】:

是的,您可以从文件中加载程序集

 Assembly.LoadFrom("MyAssembly.dll");

从 .net4 你可以使用 Is64BitOperatingSystem 环境属性。否则检查 IntPtr.Size 会根据运行架构发生变化

Cannot encrypt / decrypt SQLite database in .NET4

【讨论】:

我将如何使用 dll 方法,因为我将动态添加引用? 我添加了一个链接到我的其他回复,这应该可以帮助你 我读到了 assembly.loadfrom 方法。看起来是真的,我明天确认解决方案 我尝试了 assembly.loadfrom 方法。它被加载但VS仍然抛出异常。它仍然认为文件是 x86(在 x64 机器上) 一个简单的问题,我可以将 System.Data.SQLite 命名空间伪造给编译器吗?

以上是关于在 .NET 中动态添加引用的主要内容,如果未能解决你的问题,请参考以下文章

动态调用webservice

VS中使用动态库

C#中Winform动态调用Webservice的方法(转)

在 Blazor 中引用动态创建的控件

vb.net如何动态调用WebService接口啊

如何在 Protobuf-net 中动态添加 Proto 成员