2011-02-01 70 views
1

我的c#應用程序使用兩個不同的預打包解析器,每個解壓器都使用不同的強版本Antlr.Runtime.dll。由於同一程序集的不同版本,Visual c#項目無法運行

應用程序拋出一個FileLoadException,顯然是因爲它正確加載了其中一個版本並找不到其他版本。

<應用程序> \ bin \ x86 \ Debug目錄只包含dll的一個副本。

請注意,我不能使用程序集別名,因爲我的代碼不會直接調用版本化程序集 - 它們只是通過分析程序集間接調用。

這是否指示Visual Studio將不同版本的dll放在單獨的目錄中,因爲它們具有相同的名稱?我想盡可能避免使用GAC。

我讀過很多「並排」和相關文章,但似乎沒有解決這個問題。

+1

的GAC是爲了解決這個問題。需要30秒。實現AppDomain.AssemblyResolve並編寫後期構建事件以將副本放在單獨的目錄中需要更長的時間。 – 2011-02-01 12:18:18

+0

@hans - 打破xcopy部署。 – bright 2011-02-01 14:25:05

回答

0

掛鉤AppDomain.AssemblyResolve解決了這個問題:

AppDomain.CurrentDomain.AssemblyResolve += (s, e) => 
{ 
    Assembly result = null; 

    if (e.Name == 
     @"Antlr3.Runtime, Version=3.1.3.42154, Culture=neutral, PublicKeyToken=3a9cab8f8d22bfb7") 
     result = Assembly.LoadFile(
      @"C:\src\NHibernate-3.0.0.GA\lib\net\3.5\Antlr3.Runtime.dll"); 

    return result; 
}; 
1

我絕不是SxS專家,但在我的公司發生這種情況時,他們爲每個程序集和清單加載不同的文件夾。

相關問題