dll内のアンマネージコードを呼び出す必要のあるアプリケーションがあります。複数のアプリドメインからこれらの呼び出しを行う必要があります。具体的には、アセンブリをメモリに複数回(アプリドメインごとに1回)ロードする必要があります。
私は次のことを試みました:
Dim AppDomainSetup As New AppDomainSetup
With AppDomainSetup
.PrivateBinPath = "<Blah>"
.LoaderOptimization = LoaderOptimization.MultiDomainHost
End With
Dim AppDomain As AppDomain = AppDomain.CreateDomain(String.Format("AppDomain-{0}", AppDomainCounter), Nothing, AppDomainSetup)
AppDomainCounter += 1
Dim Manager = CType(
AppDomain.
CreateInstanceAndUnwrap(
System.Reflection.Assembly.
GetExecutingAssembly.FullName,
"<My Manager Class>"), AppDomainManager)
Return Manager
AppDomainManager
から継承しMarshalByRefobject
、(最終的に)呼び出すメソッドがあります
<DllImport("<Path>",
EntryPoint:="<MethodName>",
CallingConvention:=CallingConvention.Cdecl)>
Private Shared Function <MethodName>(
<InAttribute(),
MarshalAsAttribute(UnmanagedType.LPStr)>
ByVal sig1 As String,
<InAttribute(),
MarshalAsAttribute(UnmanagedType.LPStr)>
ByVal sig2 As String) As Integer
ただし、いくつかのテストを行った後、アセンブリの1つ(インスタンス?)が読み込まれ、アプリドメイン間で共有されているようです。AppDomain.LoaderOptimization
この設定により、ドメインごとに一意のコピーが強制されることを期待していました。
CLRにアセンブリを複数回ロードさせる方法はありますか?