如何在运行时生成程序集以使用项目依赖项? C#

时间:2017-10-03 08:13:34

标签: c# .net .net-assembly dynamically-generated

是否可以允许动态生成的程序集访问生成新程序集的项目中存在的依赖项?我正在使用Unity和C#,我添加了一个程序集,其中包含它现在所属的项目中存在的依赖项,但是我收到此错误:FileNotFoundException:无法加载文件或程序集' ModAssembly000.dll'或其中一个依赖项。我收到此错误是因为我尝试使用UnityEngine'在脚本的顶部。这是项目中已存在的代码,它获取新程序集并调用方法:

        CompilerParameters parameters = new CompilerParameters();
    parameters.GenerateExecutable = false;
    parameters.GenerateInMemory = true;
    parameters.OutputAssembly = generatedName;
    CompilerResults r = CodeDomProvider.CreateProvider("CSharp").CompileAssemblyFromFile(parameters, filePath);
    r.CompiledAssembly.GetType("ModData").GetMethod("Run").Invoke(null, BindingFlags.Static, null, null, null);

这是动态创建的程序集的来源:

using UnityEngine;

public class ModData {
    public static string modName = "Super kool mod";
    public static string modVersion = "1.2.1";

    public static void Run() {
        Debug.Log("it worked :D");
    }
}

UnityEngine(因此,Debug.Log)存在于生成此程序集的代码中。有没有办法让新创建的程序集使用它上面的UnityEngine,以便我可以允许新代码在它上面的项目中做任何事情?我知道ModAssembly000.dll存在,因为如果我删除了使用UnityEngine' line,然后我可以毫无问题地访问动态程序集的静态字符串fild。

1 个答案:

答案 0 :(得分:0)

我的猜测是你需要将Unity添加到引用的程序集列表中:

foreach var of varlist a_24_1* {
    br a_23 a_24* if a_23==1 & `var' != 1
}