我不希望这样:Assembly.LoadFrom(PathToAssembly)
。
我需要将运行时代码中的dll真正带到我的项目中,然后通常在没有激活器类的情况下使用它的类。就像我装网。 dll文件进入我的项目不是在运行时,但现在我需要在运行时添加。
答案 0 :(得分:3)
在这种情况下,您将遵循界面模式。在哪里创建包含所有所需方法存根的接口类。你仍然可以执行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
答案 1 :(得分:1)
LoadFrom
或者,例如,您可以将程序集嵌入为资源,并从流中加载答案 2 :(得分:0)
除了Assembly
提供的方法之外,没有其他方法可以在运行时动态加载.Net中的程序集。也许你有一个与你提到的方法调用相关的更具体的问题。如果是,请通过更新您的问题进行指定,以便社区可以为您提供帮助。
答案 3 :(得分:0)
您不能使用类型信息(通常使用类)并在运行时加载dll,因为您没有要编译的类型信息。
您可以正常使用接口并在接口上加载dll,或者只需引用dll并正常使用这些类。
第三个选项(但可怕的想法)是反映您尝试使用的所有类,使用辅助方法和字符串来标识属性和方法。这不是使用类的常规方法,但它会在没有类型信息存在的情况下进行编译。