[英]Assembly binding problems in .NET
我正在編寫一個.NET庫,由於各種原因,該庫無法在GAC中注冊。 該dll(我們稱其為SDK.dll)取決於要加載的其他DLL。
當編寫使用此SDK.dll的程序時,我注意到我的程序無法加載拋出FileNotFoundException的dll。 發生這種情況的原因是,盡管我能夠找到引用的SDK.dll,但CLR無法加載其依賴項。
我找到解決問題的唯一方法是“復制本地” SDK.dll及其所有依賴項(由於部署問題而無法執行此操作),或者將程序編譯到與SDK.dll相同的目錄中
有沒有辦法告訴SDK.dll在哪里尋找其依賴項,而不管其位置在哪里? 也許SDK.dll.config文件可以提供幫助?
您可以在運行時通過訂閱以下事件來處理此問題:
AppDomain.CurrentDomain.AssemblyResolve
當運行時無法解析程序集時將觸發該事件。 在事件處理程序方法中,編寫邏輯以查找程序集並使用Assembly.LoadFrom()加載該程序集。 它看起來像這樣:
public SDKClass()
{
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(FindAssembly);
}
private Assembly FindAssembly(object sender, ResolveEventArgs args)
{
string assemblyPath = "c:\PathToAssembly";
string assemblyName = args.Name.Substring(0, args.Name.IndexOf(",")) + ".dll";
string assemblyFullName = Path.Combine(assemblyPath, assemblyName);
Assembly theAssembly = Assembly.Load(assemblyFullName);
return theAssembly;
}
回復:Snooganz
您可能打算使用“加載文件”而不是“加載”,如下所示:
Assembly theAssembly = Assembly.LoadFile(assemblyFullName);
Assembly.Load
可能會使您陷入無限循環=)
您不能GAC SDK,但是您可以GAC依賴嗎?
另請閱讀此msdn關於程序集綁定的文章:
http://msdn.microsoft.com/zh-CN/library/efs781xb(VS.71).aspx
如果程序集是強命名的,則可以使用代碼庫,如果不是,則代碼庫必須是isntall的子目錄,這將無濟於事。
嘗試使用DEVPATH env變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.