2013-09-30 61 views
2

我有一個應用程序,它引用程序集「Library.dll」。我將此程序集的名稱更改爲「Library222.dll」,現在我的應用程序失敗,出現異常「無法加載文件或程序集...」 如何在運行時指定此dll文件的新名稱「Library222.dll」 ? 我發現這個問題Set Custom Path to Referenced DLL's? 但有指定文件夾到DLL,而不是文件名。我沒有改變DLL的路徑,我改變了文件名,所以我需要指定文件名。將自定義文件名設置爲被引用的dll

回答

4

您不能通過重命名程序集來實現此目的。

程序集的名稱在編譯時寫入其元數據中。
更改文件名稱時,實際上並未更改元數據中的名稱。

您必須重新引用Library.dll,並引用Library222.dll,然後重新編譯。

+0

我不需要在編譯時將名稱寫入其元數據中。還有一個名字仍然是「Library.dll」。我需要在運行時設置新的程序集名稱,但是在編譯該項目之前,您提供了我自己修改的名稱...... –

2

我發現了這個簡單的解決方案!事件AppDomain.AssemblyResolve已經幫我解決這個問題

using System; 
using System.IO; 
using System.Reflection; 
using System.Windows.Forms; 

namespace TestAsembly 
{ 
    static class Program 
    { 
     [STAThread] 
     static void Main(string[] args) 
     { 
      AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; 
      //bla-bla... 
     } 

     static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) 
     { 
      if (args.Name.StartsWith("Library,")) 
      { 
       Assembly asm = Assembly.LoadFrom("Library222.dll"); 
       return asm; 
      } 
      return null; 
     } 
    } 
} 
+1

這感覺像是一個非常奇怪的工作。如果還有其他以「圖書館」開頭的圖書館會怎麼樣?你確定你不應該重新編譯正確的鏈接到正確的文件嗎? – Default

+0

@Default因爲在安裝我的程序後,用戶可以更改dll的名稱。庫Library.dll,我引用了這個例子 - 它是一種插件。 –

+2

如果用戶可以更改名稱,我想他也可以將其更改爲「Library223.dll」。這會停止你的程序,你需要重新編譯一個新的名字。對我而言,這與正確引用相同,並且不會讓用戶重命名相關的dll。它只是感覺不對...但是,嘿,如果它適合你。 – Default

2

試試這個去項目屬性 - >應用程序,然後更改大會名稱字段。在早期版本中,它可能位於不同的地方,但我認爲Assembly Name字段仍然是您正在尋找的字段。

+0

感謝您的回覆,但我想在運行時做到這一點,我已經找到了解決方案(請參閱下面我自己的回覆) –

相關問題