I don't want this : 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でアセンブリを動的にロードする他の方法はありませんAssembly
。おそらく、あなたが言及するメソッドコールに関連するより具体的な問題があるでしょう。その場合は、コミュニティがあなたを支援できるように質問を更新して指定してください。
コンパイルする型情報がないため、(通常はクラスを使用して) 型情報を使用して実行時に dll をロードすることはできません。
インターフェイスを通常どおり使用してインターフェイスに対して dll をロードするか、単に dll を参照してクラスを通常どおりに使用することができます。
3 番目のオプション (ただしひどいアイデア) は、ヘルパー メソッドと文字列を使用してプロパティとメソッドを識別し、使用しようとしているすべてのクラスを反映することです。クラスを使用する通常の方法ではありませんが、実際には型情報が存在しなくてもコンパイルされます。