我的程序有一个pluginManager模块,它可以加载DLL文件并运行DLL的方法,但我需要在Assembly.LoadFile()
之前读取DLL属性。我该怎么办?
我对于Assembly文档感兴趣,他们在Assembly.LoadFile()
之后读取属性,你知道Assembly没有UnLoad()方法,所以我必须在LoadFile()之前读取属性
private void ImprotZip(string path)
{
/*
1、create tempDir, uppackage to tempDir
2、Load Plugin DLL, Load plugin dependent lib DLL
*/
string tempDirectory = CreateRuntimeDirectory(path);
string[] dllFiles = Directory.GetFiles(tempDirectory);
///Load DlL
foreach(string dll in dllFiles)
{
ImprotDll(dll, false);
}
string libPath = string.Format("{0}\\lib\\", tempDirectory);
if (!Directory.Exists(libPath))
return;
string[] dlls = Directory.GetFiles(libPath);
///Load plugin dependent lib DLL
foreach(string dll in dlls)
{
try
{
//filtering same DLL
//if(Dll.properties.AssemblyProduct != "something")
//continue;
Assembly.LoadFile(dll);
}
catch(Exception e)
{
e.Log();
}
}
}
答案 0 :(得分:4)
您可以使用Assembly.ReflectionOnlyLoad
将程序集加载到仅反射上下文中。
我仍然会为仅反射上下文创建一个应用程序域,这样您就可以在完成后卸载域。您可以使用AppDomain.CreateDomain
方法创建应用域。你应该为插件做这个,所以你可以在完成后卸载它们。
答案 1 :(得分:1)
FileVersionInfo.GetVersionInfo
正是您正在寻找的。 p>
答案 2 :(得分:0)
AppDomain.CurrentDomain.AssemblyResolve + =(sender,bargs)=> {
num