首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在AppDomain应用程序中将泛型类型加载到另一个ASP.NET中

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

Stack Overflow用户
提问于 2012-10-31 00:56:54
回答 1查看 389关注 0票数 2

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

有关守则基本上是这样做的:

代码语言:javascript
复制
Assembly ass = Assembly.GetExecutingAssembly();
string AssemblyPath = ass.Location;

var templateType = typeof(RazorEngine<RazorTemplateBase>);

object instance = LocalAppDomain.CreateInstanceFrom(AssemblyPath,
                                             templateType.FullName)
                                .Unwrap();

密码在最后一行爆炸。AppDomain存在,其基本执行和bin路径与原始AppDomain匹配。

在测试项目中运行此代码时,它可以正常工作。实例是创建的(作为TransparentProxy远程引用),一切都很好。

在ASP.NET中运行时,我会得到泛型类型参数的类型错误:

'Westwind.RazorHosting.RazorEngine`1TBaseTemplateType‘上的GenericArguments,’WestWind.RazorHost.RazorTemplate type‘违反了类型'TBaseTemplateType’的约束。

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

代码语言:javascript
复制
public class RazorEngine<TBaseTemplateType> : MarshalByRefObject
    where TBaseTemplateType : RazorTemplateBase

显然,我传递的是正确的类型,因为它是实际的约束类型,但不知何故,AppDomain并没有承认泛型类型是相同的。

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

不知所措。在测试项目中运行时,ASP.NET能做什么使它的行为变得如此不同呢?

EN

回答 1

Stack Overflow用户

发布于 2012-11-01 00:19:00

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

我的脑子里有这个问题已经有一段时间了,但是看看我对这个问题的答案,看看这是否有帮助:

Domain problems

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13149771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档