Chr*_*Fin 7 c# asp.net iis shadow-copy appdomain
我已经看过这个和这个问题,但它们都已经存在了几年,而在我的情况下,可能还有另一种解决方案:
我有一个ASP.NET MVC 5应用程序,带有基于THIS的插件系统.
所以我的~/bin文件夹是由框架复制的阴影,我的~/Plugins文件夹使用"手动阴影副本"到~/Plugins/ShadowCopy应用程序pre-init,如上面的链接所示.
到目前为止,这个工作正常,因为我现在有以下情况:
我创建了一个单独的受限制AppDomain来执行一些沙盒代码.
为了能够将我的程序集中定义的类型的对象传递给此域,我将此域设置为主域ApplicationBase的shadow-copy目录(如果不从那里加载它们,则SerializationException在将类型/对象传递给第二个时会得到一个domain,因为定义此类型的程序集是从不同位置加载的).
现在我可以将我的"基本程序集"中定义的类型传递给第二个域.
但是,只要我想使用插件中定义的类型,这就失败了,因为插件程序集不在默认的卷影副本目录中,而是在我的"手动卷影复制目录"中.
并且由于此目录也位于完全不同的位置,因此无法将其添加为PrivateBinPath基本路径下方.
目前我使用以下"解决方法":
#pragma warning disable 0618
AppDomain.CurrentDomain.SetShadowCopyPath(String.Join(";",
HostingEnvironment.MapPath("~/bin"),
HostingEnvironment.MapPath("~/Plugins/ShadowCopy")));
#pragma warning restore 0618
Run Code Online (Sandbox Code Playgroud)
在pre-init方法中.这将"手动阴影副本目录"添加到默认的阴影副本目录,我的插件也被框架阴影复制,我的第二个AppDomain能够加载它们,一切都在或多或少地起作用.
但正如SetShadowCopyPath我所描述的那样,我现在正在回答我的实际问题:
我正在寻找一种更好的解决方案来避免使用这种方法.
我想到了以下解决方案,但无法确定是否/如何可行:
AppDomain的AppDomainSetup.ShadowCopyDirectories属性~/bin~/Plugins/ShadowCopyweb.config ~/bin/Plugins并告诉IIS不回收主AppDomain文件夹中的更改(否则应用程序会在每次请求时重新启动,因为pre-init方法每次都会更改其中的文件)另一个想法是将"手动阴影副本目录"设置在默认的卷影副本目录下,所以不是~/Plugins/ShadowCopy类似的东西C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\69da84c5\cd056104\Plugins,但是"干扰框架文件夹"是明智的吗?
我愿意解决这个问题以及解决我的基本问题的不同方法.
| 归档时间: |
|
| 查看次数: |
1550 次 |
| 最近记录: |