在ASP.NET应用程序中,我试图从存储在bin子文件夹中的不同程序集中执行AppDomain中的方法。我正在创建AppDomain并调用AppDomain.CreateInstanceAndUnwrap。它在我的计算机和Windows Server 2K8上工作正常,但在Windows Server 2k3上引发异常:
在System.AppDomain.CreateInstanceAndUnwrap(String assemblyName, 字符串typeName)在System.AppDomain.CreateInstance(String assemblyName,String typeName)at System.Activator.CreateInstance(String assemblyName,String typeName) 在System.Activator.CreateInstance(String assemblyName,String typeName,Boolean ignoreCase,BindingFlags bindingAttr,Binder binder, Object [] args,CultureInfo culture,Object [] activationAttributes, 证据securityInfo,StackCrawlMark& stackMark)at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, 证据集合安全,StackCrawlMark& stackMark,布尔 forIntrospection)at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(的AssemblyName assemblyRef,Evidence assemblySecurity,StackCrawlMark& stackMark, Boolean forIntrospection,Boolean suppressSecurityChecks)at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint, StackCrawlMark&安培; stackMark,Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks)at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint, StackCrawlMark&安培; stackMark,Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks)
System.IO.FileLoadException:无法加载文件或程序集 'MyAssembly'或其依赖项之一。退出API调用 异常。 (HRESULT的例外情况:0x800300FA (STG_E_ABNORMALAPIEXIT))System.IO.FileLoadException:无法加载 文件或程序集'MyAssembly,Version = 2.23.7.23064,Culture = neutral, PublicKeyToken = null'或其依赖项之一。退出API调用 异常。 (HRESULT的例外情况:0x800300FA (STG_E_ABNORMALAPIEXIT))
有人知道为什么吗?
答案 0 :(得分:0)
我的回答(AppDomain shadow copied file access denied with ASP.NET site running on IIS6): 出现问题的原因是CachePath默认值。如果AppPool在网络服务下运行,则使用DefaultUser临时文件夹位置(我不知道为什么)。但网络服务无权访问该文件夹,这是异常的原因。解决方案是显式设置CachePath。例如,我们可以使用ASP.NET AppPool缓存路径:
var domainInfo = new AppDomainSetup
{
CachePath = AppDomain.CurrentDomain.SetupInformation.CachePath
/* ...*/
};