我在当前项目中遇到了一些问题,如果有人可以为我提供一些见解或可能的建议,我将不胜感激。
我的项目是一项服务,它正在执行用户脚本。脚本是用 C# 编写的,我使用 CodeDomProvider 在运行时构建程序集。程序集包含单个类。
public Script : ScriptBase
{
public override void Run(){}
}
允许用户更改脚本,如果我检测到更改。我重建创建 ScriptBase 子项的新实例的内容。我知道带有脚本 S1 的原始程序集 A1 仍然加载在当前的 AppDomain 中,但这是我愿意付出的代价。这种情况下没有任何问题。
我想为用户定义的库添加一个功能(也可以在运行时编辑)。所以现在的问题是我有一个脚本 S1,它正在使用库 L1。如果用户更改 L1,我显然必须重建所有脚本。问题来了:
build L1 with type T1
build S1 --depends--> L1
(use S1)
build L2 with type T1
build S2 --depends--> L2 = crashes type T1 is defined in L1 and L2
(use S1) //It passes through if I didn't use S1 for the first time
我有以下问题
我的第一个场景怎么会起作用。即我一遍又一遍地构建和加载相同类型的程序集,一切正常
2.如果我在构建 S1 后不使用它,我可以构建 S2,即使当我检查模块时,我可以看到所有程序集 L1、S1、L2、S2 都已加载。显然,如果我加载程序集,但我不以某种方式使用它,则“已加载程序集,但未加载类型”。到底发生了什么?
3.你有什么建议来解决我的问题?看起来最合乎逻辑的是使用临时 AppDomain,但我没有任何经验,它看起来很复杂,如果有更简单的解决方案,我宁愿使用它。
谢谢