如果您會注意到我對您問題的評論,那麼很明顯我並不確切地確定如何您想要或需要解決此問題,但在我們進行更詳細的說明之前,我只能提供你這是非常適合你的情況,希望(關鍵是在「搜索」的組件):
var className = "System.Boolean";
var assemblyName = "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
var assembly = (from a in assemblies
where a.FullName == assemblyName
select a).SingleOrDefault();
if (assembly != null)
{
System.Runtime.Remoting.ObjectHandle obj =
System.Activator.CreateInstance(assemblyName, className);
}
.NET 2.0兼容的代碼
Assembly assembly = null;
var className = "System.Boolean";
var assemblyName = "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
foreach (var a in AppDomain.CurrentDomain.GetAssemblies())
{
if (a.FullName == assemblyName)
{
assembly = a;
break;
}
}
if (assembly != null)
{
System.Runtime.Remoting.ObjectHandle obj =
System.Activator.CreateInstance(assemblyName, className);
}
如果要確定是否該文件在嘗試使用之前就存在廣告它(一個很好的做法),那麼,給你擁有它的名字,並且知道所需的位置,只是試圖找到該文件時,該組件被解析:
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
var className = "StackOverflowLib.Class1";
var assemblyName = "StackOverflowLib.dll";
var currentAssemblyPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var obj = Activator.CreateInstance(Path.Combine(currentAssemblyPath, assemblyName), className);
static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
var currentAssemblyPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
if (File.Exists(Path.Combine(currentAssemblyPath, args.Name)))
{
return Assembly.LoadFile(Path.Combine(currentAssemblyPath, args.Name));
}
return null;
}
你的意思是加載到當前的應用程序域?什麼是`assemblyName`?完全合格的程序集名稱或物理文件路徑? – 2011-02-07 09:28:44
@MrDisaapointment我知道的唯一事情是我的數據庫中有一個「CustomModule」。如果CustomModule.dll存在於我的bin或GAC(!?)中,而不是生成由classname指定的類。 – 2011-02-07 09:41:52
看到我的最新更新,希望這足以繼續。 – 2011-02-07 10:08:32