1

我有一个应用程序需要在 dll 中调用一些非托管代码。我需要从多个应用程序域进行这些调用,并且特别希望程序集多次加载到内存中(每个应用程序域一次)。

我尝试过执行以下操作:

    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

但是,在进行一些测试之后,似乎正在加载程序集的单个(实例?)并在应用程序域之间共享。我希望该AppDomain.LoaderOptimization设置会强制每个域有一个唯一的副本。

有什么办法可以强制 CLR 多次加载程序集?

4

0 回答 0