私は現在、VB.NETプロジェクト(Imports文、宣言など)で参照する無料のNLogロギングライブラリ(DLL)を使用するアプリケーションを使用しています。オブジェクトを使用するためにImportsステートメントとDLLをコードに置き換えますか?
無料のNLogロギングライブラリを使用するアプリケーションに共通の機能を含むクラスライブラリ(DLL)を作成しました。私の主なアプリケーションのためにNLog.dllをアップグレードすると、クラスライブラリアプリケーションを起動して更新する必要があります。私は毎回クラスライブラリを更新/再コンパイルする必要がなく、現在のオブジェクトを渡したり、NLogアセンブリを動的に(コード内に)ロードしたいと思っています。
Imports NLog
Private mLog As Logger
Public ReadOnly Property Log As Logger
Get
If (mLog Is Nothing) Then
mLog = LogManager.GetCurrentClassLogger
End If
Return mLog
End Get
End Property
Later on used as:
Log.Error("Message...")
私は関数にNLogオブジェクトに渡し、その後、何とかNLogアセンブリをロードし、それを使用する変数を宣言するために期待していた:私のクラスライブラリプロジェクトで
は、私はこのような何かを持っています。
''Imports NLog
Private mLog As Object
Public ReadOnly Property Log As Object
Get
If (mLog Is Nothing) Then
Dim theAssembly As Assembly = Assembly.LoadFrom(AppDomain.CurrentDomain.BaseDirectory & "NLog.dll")
Dim typeLogManager As Type = theAssembly.GetType("NLog.LogManager")
Dim myObj As Object = Activator.CreateInstance(typeLogManager)
mLog = typeLogManager.InvokeMember("GetCurrentClassLogger", BindingFlags.Default Or BindingFlags.InvokeMethod, Nothing, myObj, Nothing)
End If
Return mLog
End Get
End Property
私は、これは「CurrentClassLogger」オブジェクトを作成するだろうと思ったが、それはエラーで失敗し続ける「このオブジェクトのために定義されていませんパラメータなしのコンストラクタ。」ライン上で
Dim myObj As Object = Activator.CreateInstance(typeLogManager)
ここで間違っていることや私が紛失していることがわかりません。私はNLogアセンブリで参照(インポート)したのと同様のLoggerを作成することができます。どんなヘルプやサンプルコードも大歓迎です!
種類よろしく
ありがとうございました!ロガーとしてキャストせずにLoggerのインテリセンス(mLogに返されるオブジェクト)を保持する方法はありますか(import文を含める必要があります)?私はまだintellisenseを持つことができたいと思うし、mLogがObjectとして宣言されているので、私はそれを得ることができないことを知っています。私はちょうどこれを持っていたが、多くのぎこちない:Dim MyObj As Object = Activator.CreateInstance(typeLogManager、BindingFlags.CreateInstanceまたはBindingFlags.NonPublicまたはBindingFlags.InstanceまたはBindingFlags.OptionalParamBinding、Nothing、Nothing、Nothing、Nothing) – DataCrypt
いいえそれは不可能です。 – thehennyy
どのバージョンのNLogを組み合わせたいですか? – Julian