我不想要这个:Assembly.LoadFrom(PathToAssembly)
。
我需要真正将运行时代码中的 dll 带到我的项目中,然后在没有激活器类的情况下正常使用它的类。就像我加载网络一样。dll 文件不是在运行时添加到我的项目中,但现在我需要在运行时添加。
在这种情况下,您将遵循接口模式。您可以在其中创建具有所有所需方法存根的接口类。您仍将执行您的 Assembly.Load,但随后将生成的激活对象强制转换为您的接口类。
我没有 c# 中的示例,但是这个 vb.net 应该很容易理解。
Dim alib As Byte() = System.IO.File.ReadAllBytes(Application.StartupPath & "\\PeriodicMinimumsUtilities.dll")
Dim adeb As Byte() = System.IO.File.ReadAllBytes(Application.StartupPath & "\\PeriodicMinimumsUtilities.pdb")
Dim assembly As System.Reflection.Assembly = System.Reflection.Assembly.Load(alib, adeb)
Dim type As Type = Assembly.GetType("PeriodicMinimumsUtilities.frmPeriodicMinimumsReconcilliation")
Dim obj As Fireblade.POS.Business.IPeriodicMinimumsUtilities = Activator.CreateInstance(type)
界面:
Public Interface IPeriodicMinimumsUtilities
WriteOnly Property Database() As Meritsoft.GolfRez.Data.Database
Function LoadMinimumsDataSource(ByVal v_fiscalYear As String, ByVal v_fiscalPeriod As Integer) As DataSet
Function GetMinimumsSpent(ByVal v_fiscalYear As String, ByVal v_fiscalPeriod As Integer) As DataTable
Function LoadFiscalPeriodsDataSource(ByVal ImposeLimit As Boolean) As DataSet
End Interface
LoadFrom
或者,例如,您可以将程序集作为资源嵌入,并从流中加载它除了 .Net 提供的方法之外,没有其他方法可以在运行时在 .Net 中动态加载程序集Assembly
。也许您有一个与您提到的方法调用相关的更具体的问题。如果是这样,请通过更新您的问题来指定它,以便社区可以为您提供帮助。
您不能使用类型信息(通常使用类)并在运行时加载 dll,因为您将没有类型信息可供编译。
您可以正常使用接口并针对接口加载 dll,或者您可以仅引用 dll 并正常使用类。
第三种选择(但一个糟糕的想法)是反映您尝试使用的所有类,使用辅助方法和字符串来识别属性和方法。这不是使用类的正常方式,但它实际上会在不存在类型信息的情况下编译。