C#在内存中编译并创建内存程序集类型的实例

C#在内存中编译并创建内存程序集类型的实例,c#,compilation,activator,C#,Compilation,Activator,如何将程序集加载到内存中,并使用其名称来恢复其中一种类型 我有这个要编译: /// <summary> /// Compiles the input string and saves it in memory /// </summary> /// <param name="source"></param> /// <param name="referencedAssemblies"></pa

如何将程序集加载到内存中,并使用其名称来恢复其中一种类型

我有这个要编译:

    /// <summary>
    /// Compiles the input string and saves it in memory
    /// </summary>
    /// <param name="source"></param>
    /// <param name="referencedAssemblies"></param>
    /// <returns></returns>
    public static CompilerResults LoadScriptsToMemory(string source, List<string> referencedAssemblies)
    {
        CompilerParameters parameters = new CompilerParameters();

        parameters.GenerateInMemory = true;
        parameters.GenerateExecutable = false;
        parameters.IncludeDebugInformation = false;

        //Add the required assemblies
        foreach (string reference in referencedAssemblies)
            parameters.ReferencedAssemblies.Add(reference);

        foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
        {
            if (asm.Location.Contains("Microsoft.Xna") || asm.Location.Contains("Gibbo.Library") 
                || asm.Location.Contains("System"))
            {
                parameters.ReferencedAssemblies.Add(asm.Location);
            }
        }

        return Compile(parameters, source);
    }

    /// <summary>
    /// Compiles a source file with the given parameters and source
    /// </summary>
    /// <param name="parms"></param>
    /// <param name="source"></param>
    /// <returns></returns>
    private static CompilerResults Compile(CompilerParameters parameters, string source)
    {
        CodeDomProvider compiler = CSharpCodeProvider.CreateProvider("CSharp");
        return compiler.CompileAssemblyFromSource(parameters, source);
    }
SceneManager.ScriptsAssembly.FullName:>我将编译后的程序集保存在SceneManager.ScriptsAssembly中

name:>我要加载的类型的名称

我得到了这个错误:

加载场景时出错:无法加载文件或程序集“NHVNEZW,版本=0.0.0.0,区域性=中性,PublicKeyToken=null”或其依赖项之一。系统找不到指定的文件

程序集名称正确。可能是什么

提前感谢。

根据MSDN()

CompiledAssembly属性的get访问器调用Load方法将编译后的程序集加载到当前应用程序域中

您可以使用Assembly.CreateInstance()方法而不是Activator。如果只需要按类型名称创建实例,则必须获取CompilerResults.CompiledAssembly属性的值。

根据MSDN()

CompiledAssembly属性的get访问器调用Load方法将编译后的程序集加载到当前应用程序域中


您可以使用Assembly.CreateInstance()方法而不是Activator。如果只需要按类型名称创建实例,则必须获取CompilerResults.CompiledAssembly属性的值。

谢谢!我能够使用Assembly.CreateInstance();)正确加载它们@若昂·奥尔夫斯如果你认为诺瓦科夫的回答是正确的,并且帮助了你,你应该接受它:谢谢!我能够使用Assembly.CreateInstance();)正确加载它们@若昂·奥尔夫斯如果你认为诺瓦科夫的答案是正确的,并且对你有所帮助,那么你应该接受它:答案遗漏了重要的代码。别忘了检查CompilerResults.Errors。如果保存程序集,则不要编译到内存中。在困难的情况下使用Fuslogvw.exe。删除了重要的代码。别忘了检查CompilerResults.Errors。如果保存程序集,则不要编译到内存中。对于棘手的情况,请使用Fuslogvw.exe。
    var handler = Activator.CreateInstance(SceneManager.ScriptsAssembly.FullName, name);
    ObjectComponent oc = (ObjectComponent)handler.Unwrap();