【问题标题】:why c# dynamic compiled type cannot be found by using Type.GetType method?为什么使用Type.GetType方法找不到c#动态编译类型?
【发布时间】:2021-02-07 03:21:06
【问题描述】:
ICodeCompiler comp = new CSharpCodeProvider().CreateCompiler();
            CompilerParameters cp = new CompilerParameters();
            cp.ReferencedAssemblies.Add("system.dll");
            cp.ReferencedAssemblies.Add("system.data.dll");
            cp.ReferencedAssemblies.Add("system.xml.dll");
            cp.GenerateExecutable = false;
            cp.GenerateInMemory = true;
            StringBuilder codes = new StringBuilder();
            codes.Append("using System; \n");
            codes.Append("using System.Data; \n");
            codes.Append("namespace Test \n");
            codes.Append("{ \n");
            codes.Append(" public class TestClass \n");
            codes.Append(" { \n");
            codes.Append("    public static string TestMethod() \n");
            codes.Append("     { \n");
            codes.Append("        return ""; \n");
            codes.Append("     } \n");
            codes.Append(" } \n");
            codes.Append("} \n");
            CompilerResults cr = comp.CompileAssemblyFromSource(cp, codes.ToString());

在我成功编译这个类并通过调用方法成功使用该方法后,我使用GetType(“Test.TestClass”)然后返回null。怎么了?

【问题讨论】:

  • 试试cr.CompiledAssembly.GetType("Test.TestClass")

标签: c# compiler-errors dynamic-compilation


【解决方案1】:

Type.GetType 需要AssemblyQualifiedName 才能工作。但是,您编译的程序集有一个随机名称。

获取类型的选项有:

  1. cr.CompiledAssembly.GetType
  2. cr.CompiledAssembly.ExportedTypes
  3. 通过添加为您的程序集命名
cp.OutputAssembly =@"C:\my_full_path\myName.dll"

然后使用Test.TestClass, myName, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    相关资源
    最近更新 更多