我正在使用 Microsoft.CodeAnalysis.CSharp.Scripting 的 CSharpScript(版本 3.4.0-beta2-final)来执行自定义计算。有些计算不是直接在脚本中定义的,而是委托给 MyPlugin.Calculations 类的已编译静态方法,该方法驻留在 MyPlugin 程序集中(仅调用静态方法)。
当我尝试从脚本调用 Calculations 类的静态方法时
return Calculations.GetHpPipingPrice();
它抛出这个异常:
TypeLoadException: Could not load type 'MyPlugin.Calculations' from assembly 'MyPlugin.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
我不明白,为什么它在 MyPlugin 程序集中定义时尝试从 MyPlugin.Data 程序集中加载类型计算。我添加了对 MyPlugin 程序集的引用并将 MyPlugin 命名空间导入到 ScriptOptions。这里有什么问题?这可能是我有一个插件系统并使用 Assembly.LoadFrom 方法加载 MyPlugin 程序集吗?MyPlugin 与正在执行的程序集不在同一目录中。MyPlugin.Data 程序集包含用于初始化的数据(它还包含脚本的主体)。
编辑:这是脚本的创建方式:
var compiledScript = CSharpScript.Create(Body, globalsType: InputType,
options: ScriptOptions.Default.AddReferences(AssemblyReferences).AddImports(Imports));
CompiledScript = compiledScript.CreateDelegate();
其中 AssemblyReferences 包含程序集 MyPlugin(以及其他),Imports 包含 MyPlugin 命名空间(以及其他)。