我该如何告诉我的.NET应用程序在哪里查找特定的程序集(除了GAC或应用程序运行的文件夹)?
例如,我想将一个程序集放在用户的Temp文件夹中,并让我的应用程序知道所引用的程序集在临时文件夹中。
谢谢。
我该如何告诉我的.NET应用程序在哪里查找特定的程序集(除了GAC或应用程序运行的文件夹)?
例如,我想将一个程序集放在用户的Temp文件夹中,并让我的应用程序知道所引用的程序集在临时文件夹中。
谢谢。
你可以使用AppDomain.AssemblyResolve事件来添加自定义程序集解析器。这允许您指向其他目录甚至数据库以根据需要获取程序集。
我甚至使用了类似的代码从数据库中下载程序集并存储在IsolatedStorage中。文件名是完整程序集名称的哈希值。然后,数据库只需要在第一次解析时进行下载,所有未来的解析都将由文件系统提供。AssemblyResolve事件最好的部分是您可以将其用于Type.GetType()和内置序列化程序。
static string lookupPath = @"c:\otherbin";
static void Main(string[] args)
{
AppDomain.CurrentDomain.AssemblyResolve +=
new ResolveEventHandler(CurrentDomain_AssemblyResolve);
}
static Assembly CurrentDomain_AssemblyResolve(object sender,
ResolveEventArgs args)
{
var assemblyname = new AssemblyName(args.Name).Name;
var assemblyFileName = Path.Combine(lookupPath, assemblyname + ".dll");
var assembly = Assembly.LoadFrom(assemblyFileName);
return assembly;
}
System.Reflection.Assembly.LoadFrom(myFile);
string assemblyname = new AssemblyName(args.Name).Name;
而不是使用Split(',')
。 - kroimon