我创建了一个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
只包含我设置它的属性,第一次在{{1} }
答案 0 :(得分:1)
您无法使用Assembly.LoadFrom
在应用程序域中加载相同的命名DLL两次。
请参阅MSDN上Assembly.LoadFrom
功能的the Remarks section:
- 如果已加载具有相同标识的程序集,则即使指定了不同的路径,LoadFrom也会返回已加载的程序集。
一个可能的解决方案是让CSharpCodeProvider
为程序集生成一个随机名称并加载它,但是如果我在那里你会认真考虑是否真的需要在运行时构建这些类。只需在设计时构建它们,并给它们两个不同的名称。甚至可以从Conf
Index