0

I don't want this : Assembly.LoadFrom(PathToAssembly).

実行時コードの dll をプロジェクトに実際に持ち込んでから、そのクラスをアクティベーター クラスなしで通常どおり使用する必要があります。まさに私がネットをロードするように。dll ファイルを実行時ではなくプロジェクトに追加しましたが、実行時に追加する必要があります。

4

4 に答える 4

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
于 2013-04-12T08:02:43.787 に答える
1
  1. DLLを「使用」できるようにするには、通常のようにDLLを参照する必要があります
  2. 次に、アセンブリを使用するLoadFromか、たとえば、アセンブリをリソースとして埋め込み、ストリームからロードすることができます
于 2013-04-12T08:00:12.493 に答える
0

提供される方法よりも、実行時に.NETでアセンブリを動的にロードする他の方法はありませんAssembly。おそらく、あなたが言及するメソッドコールに関連するより具体的な問題があるでしょう。その場合は、コミュニティがあなたを支援できるように質問を更新して指定してください。

于 2013-04-12T08:02:39.670 に答える
0

コンパイルする型情報がないため、(通常はクラスを使用して) 型情報を使用して実行時に dll をロードすることはできません。

インターフェイスを通常どおり使用してインターフェイスに対して dll をロードするか、単に dll を参照してクラスを通常どおりに使用することができます。

3 番目のオプション (ただしひどいアイデア) は、ヘルパー メソッドと文字列を使用してプロパティとメソッドを識別し、使用しようとしているすべてのクラスを反映することです。クラスを使用する通常の方法ではありませんが、実際には型情報が存在しなくてもコンパイルされます。

于 2013-04-12T08:11:27.507 に答える