控制P / Invoked程序集如何加载到不同的应用程序域中

时间:2012-08-21 11:09:54

标签: .net assemblies appdomain

我有一个需要在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多次加载程序集?

0 个答案:

没有答案