1

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にアセンブリを複数回ロードさせる方法はありますか?

4

0 に答える 0