Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法将泛型类型加载到ASP.NET应用程序中的另一个AppDomain中_C#_Asp.net_Appdomain - Fatal编程技术网

C# 无法将泛型类型加载到ASP.NET应用程序中的另一个AppDomain中

C# 无法将泛型类型加载到ASP.NET应用程序中的另一个AppDomain中,c#,asp.net,appdomain,C#,Asp.net,Appdomain,我有一个非常奇怪的问题,在ASP.NET内部运行时,我无法将泛型类型加载到另一个AppDomain中,但它在我的测试项目和控制台应用程序中工作 相关规范基本上做到了这一点: Assembly ass = Assembly.GetExecutingAssembly(); string AssemblyPath = ass.Location; var templateType = typeof(RazorEngine<RazorTemplateBase>); object insta

我有一个非常奇怪的问题,在ASP.NET内部运行时,我无法将泛型类型加载到另一个AppDomain中,但它在我的测试项目和控制台应用程序中工作

相关规范基本上做到了这一点:

Assembly ass = Assembly.GetExecutingAssembly();
string AssemblyPath = ass.Location;

var templateType = typeof(RazorEngine<RazorTemplateBase>);

object instance = LocalAppDomain.CreateInstanceFrom(AssemblyPath,
                                             templateType.FullName)
                                .Unwrap();
Assembly=Assembly.getExecutionGassembly();
字符串AssemblyPath=ass.位置;
var templateType=typeof(RazorEngine);
对象实例=LocalAppDomain.CreateInstanceFrom(AssemblyPath,
templateType.FullName)
.Unwrap();
代码在最后一行爆炸。AppDomain存在,其基本执行路径和bin路径与原始AppDomain匹配

在测试项目中运行此代码时,它工作正常。实例已创建(作为TransparentProxy remoting引用),一切正常

在ASP.NET中运行时,我在泛型类型参数上遇到类型错误:

常规参数[0],“Westwind.RazorHosting.RazorTemplateBase”,位于 “Westwind.RazorHosting.RazorEngine`1[TBaseTemplateType]”违反了 类型为“TBaseTemplateType”的约束

其中TBaseTemplateType与传入的类型(即RazorTemplateBase)相同,RazorEngine的定义如下:

public class RazorEngine<TBaseTemplateType> : MarshalByRefObject
    where TBaseTemplateType : RazorTemplateBase
公共类RazorEngine:MarshallByRefObject
其中TBaseTemplateType:RazorTemplateBase
很明显,我传递的是正确的类型,因为它是实际的约束类型,但不知何故AppDomain没有将泛型类型识别为相同的类型

正如我提到的,它在Windows应用程序和测试项目中工作,但在ASP.NET中,泛型类型不会跨AppDomain边界实例化。使用相同的代码创建一个非泛型类型(甚至是继承自RazorHosting的该类型RazorHosting的同一个非泛型版本),它工作正常


难倒了。ASP.NET做了什么使其行为与在测试项目中运行时如此不同?

我以前遇到过这个奇怪的问题。这似乎归结为卷影副本(ASP.NET默认使用)、每个AppDomain的ApplicationBase和加载上下文的组合

我已经有一段时间没有遇到这个问题了,但请查看我对这个问题的回答,看看这是否有帮助:


我认为拉塞尔是对的。这可能是一个卷影复制问题。尝试用templateType.Assembly.Location替换AssemblyPath。