0

我创建了一个 dll,其中包含一个名为PersonVM如下所示的类。及其工作...

  public ActionResult Index()

    {


        using (CSharpCodeProvider codeProvider = new CSharpCodeProvider())
        {
            System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateExecutable = false;
            parameters.OutputAssembly = "Per.dll";
            CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, "public class PersonVM{ " + "public int id{get;set;}" +
                "public string Name{get;set;}" + "public string LName{get;set;}" + " }");
        }

        Assembly assembly = Assembly.LoadFrom("Per.dll");
        var type = assembly.GetType("PersonVM");
        var d = type.GetProperties();
        object obj = Activator.CreateInstance(type, true);
        return View(obj);


    }

但是这段代码在我的索引控制器中只工作了一次。例如,它不会在这里更改我的 dll 类:

     public ActionResult Conf()

    {
        using (CSharpCodeProvider codeProvider = new CSharpCodeProvider())
        {
            System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateExecutable = false;
            parameters.OutputAssembly = "Per.dll";

            CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, "public class PersonVM{ " + "public int id{get;set;}" +
              "public string Name{get;set;}" + "public string LName{get;set;}" + "public string LNamee2 { get; set; }" + "public string L4 { get; set; }" + " }");
        }


        Assembly assembly = Assembly.LoadFrom("Per.dll");
        var type = assembly.GetType("PersonVM");


        object obj = Activator.CreateInstance(type, true);



        List<ClassInfoVM> model = obj.GetType().GetProperties()
            .Select(T => new ClassInfoVM()
            {
                PropName = T.Name,

                TypeOfProp = T.PropertyType.Name

            }).ToList();


        return View(model);
    }

没有任何错误..它只是没有改变我的 dll 类...... dll 类PersonVM只包含我第一次设置的属性Index

4

1 回答 1

1

您不能使用Assembly.LoadFrom.

请参阅MSDN 上函数的备注部分:Assembly.LoadFrom

LoadFrom方法有以下缺点。考虑改用 Load

  • 如果已加载具有相同标识的程序集,即使指定了不同的路径,LoadFrom 也会返回加载的程序集。

一种可能的解决方案是让CSharpCodeProvider程序集生成一个随机名称并加载它,但是如果我在哪里我会认真考虑你是否真的需要在运行时构建这些类。只需在设计时构建它们并给它们两个不同的名称。甚至可能使版本 confConf从版本中派生Index

于 2016-10-26T15:27:19.747 回答