加载网。 DLL文件动态进入我的项目

时间:2013-04-12 07:55:51

标签: c# dll

我不希望这样:Assembly.LoadFrom(PathToAssembly)

我需要将运行时代码中的dll真正带到我的项目中,然后通常在没有激活器类的情况下使用它的类。就像我装网。 dll文件进入我的项目不是在运行时,但现在我需要在运行时添加。

4 个答案:

答案 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)

  1. 您需要像通常那样引用DLL以便能够“使用”它
  2. 然后,使用LoadFrom或者,例如,您可以将程序集嵌入为资源,并从流中加载

答案 2 :(得分:0)

除了Assembly提供的方法之外,没有其他方法可以在运行时动态加载.Net中的程序集。也许你有一个与你提到的方法调用相关的更具体的问题。如果是,请通过更新您的问题进行指定,以便社区可以为您提供帮助。

答案 3 :(得分:0)

您不能使用类型信息(通常使用类)并在运行时加载dll,因为您没有要编译的类型信息。

您可以正常使用接口并在接口上加载dll,或者只需引用dll并正常使用这些类。

第三个选项(但可怕的想法)是反映您尝试使用的所有类,使用辅助方法和字符串来标识属性和方法。这不是使用类的常规方法,但它会在没有类型信息存在的情况下进行编译。