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