我正在生成C#代码并在运行时将其编译为DLL,然后将DLL加载到程序中并调用其方法。
但是当我再次编译DLL并尝试加载它时,.NET已经认为它已经加载了DLL,因此不会重新加载DLL。我可以说是这种情况,因为我调用的任何方法仍然以相同的方式行事,即使我更改了他们的代码。此外,在重新启动程序时,方法会按预期开始工作。
我理解,此时通常的建议是使用第二个AppDomain
并将MarshalByRef
添加到我的所有课程中,但这种方法对我不起作用;在DLL内部我需要转换使用远程处理时不起作用的传入数据,因为对象是__TransparentProxy
并将其转换为我需要的返回null。
所以我能看到的另一个选择是欺骗.NET认为它正在将不同的DLL /类型加载到程序中,所以实际加载它。
到目前为止,我已经尝试过:
...但仍然没有加载新的DLL。即使更改输出文件夹,查看属性`assembly.Location'也会显示旧的DLL路径。那么仍然让它认为它是一样的呢?
我如何在运行时加载DLL:
Assembly assembly = Assembly.LoadFrom(dllFilePath);
Type type = assembly.GetTypes().Single(t => t.BaseType.Name == "Parser");
var classInstance = Activator.CreateInstance(type);
return classInstance as Parser;
答案 0 :(得分:0)
Assembly.LoadFrom
方法将加载新程序集,如果它具有不同的标识。为新生成的程序集(不仅是文件名)指定唯一名称。
http://msdn.microsoft.com/library/1009fa28(v=vs.110).aspx