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