创建AppDomain后,ShadowCopy文件夹保持为空

时间:2015-02-03 11:06:55

标签: c# .net appdomain

我像这样创建一个新的AppDomain

var setup = new AppDomainSetup
{
    ShadowCopyFiles = "true",
    ShadowCopyDirectories = executableFolderPath, // a semicolon separated list of three directory
    CachePath = shadowCopyFolderPath, // a custom path for the ShadowFiles
    AppDomainInitializer = new AppDomainInitializer(AppDomainInit),
    AppDomainInitializerArguments = initArgs, // shadowCopyFolderPath + executableFolderPath
    ApplicationBase = root.BaseDirectory // the base directory of the current AppDomain
};
var domain = AppDomain.CreateDomain(domainName, AppDomain.CurrentDomain.Evidence, setup);

我正在使用MEF访问已创建的AppDomain中的已定义类型,其中MEFLoader是另一个程序集的一部分,该程序集未在新创建的AppDomain的任何程序集中引用。

Type typeToCreate = typeof(MEFLoader);
var loader = (MEFLoader)domain.CreateInstanceAndUnwrap(
    typeToCreate.Assembly.FullName,
    typeToCreate.FullName,
    false,
    System.Reflection.BindingFlags.CreateInstance,
    null,
    args,
    CultureInfo.InvariantCulture,
    null);

到目前为止,这么好。这一切都很顺利。但我想在AppDomain之间共享一些程序集,因此我添加了SharedLibraryFolder。所以文件夹结构可能是:

RootAppDomain
- SharedLibraries
- ChildAppDomain
  - ChildApp1
  - ChildApp2

executableFolderPath看起来像ChildAppDomain 1的位置:

"C:\Sample\Path\RootAppDomain\ChildAppDomain\ChildApp1;C:\Sample\Path\RootAppDomain\SharedLibraries"

现在我猜想将booth文件夹复制到ShadowCopyFolder并加载所有程序集。 但是当我在创建新的AppDomain(ChildApp1)之后(在创建MEFLoader实例之前)查看文件夹时,该文件夹为空。此时,我还检查了已创建的ChildApp1 AppDomain的已加载程序集,该AppDomain仅包含此状态下的mscorelib。 创建MEFLoader实例后的Rigth ShadowCopyFolder仍然为空,并且MEFLoader程序集增加了已加载的程序集。如果我现在使用MEF创建实例,则ChildApp1.dll将加载到ChildApp1 AppDomain中,ShadowCopyFolder包含ChildApp1文件夹的副本。但SharedLibraries仍未被复制。

我的问题是什么时候创建了阴影,以及为什么没有复制某些文件夹(SharedLibraries)。另外我想问一下appdomain如何确定它加载的程序集(即IIS总是加载所有程序集)

0 个答案:

没有答案