gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:23:52 25 4
gpt4 key购买 nike

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

相关代码基本上是这样做的:

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 中运行时,我在泛型类型参数上遇到类型错误:

GenericArguments[0], 'Westwind.RazorHosting.RazorTemplateBase', on 'Westwind.RazorHosting.RazorEngine`1[TBaseTemplateType]' violates the constraint of type 'TBaseTemplateType'.

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

public class RazorEngine<TBaseTemplateType> : MarshalByRefObject
where TBaseTemplateType : RazorTemplateBase

很明显,我传递的是正确的类型,因为它是实际的限制类型,但不知何故,AppDomain 无法将通用类型识别为相同的类型。

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

难倒了。 ASP.NET 可以做些什么来使它的行为与在测试项目中运行时如此不同?

最佳答案

我以前遇到过这个奇怪的问题。它似乎归结为 Shadow Copy(ASP.NET 默认使用)、每个 AppDomain 的 ApplicationBase 和 Load Contexts 的组合。

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

Domain problems

关于c# - 无法将泛型类型加载到 ASP.NET 应用程序中的另一个 AppDomain,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13149771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com