2012-09-17 76 views
0

該文件存在,正確命名且未損壞。如果我將它從「Bin」中移出並重新進入,它會再次運行約5分鐘,然後錯誤波紋回來。任何刷新文件的操作都很好,重新發布它,重命名或移動會使網站再次運行一段時間。在bin文件夾中存在程序集文件時,ASP.net異常「FileNotFoundException」

{ 「消息」:「無法加載文件或組件\ u0027Ouranos, 版本= 1.0.0.0,文化= FR-CA公鑰=空\ u0027或 它的依賴一個樂fichierspécifiéEST 「StackTrace」:「 at Services.Asynchrone(String DimensionX,String DimensionY,String Action,String Culture,String Utilisateur,String Interface,String Source,String Champ,String Valeur,String Classement,String Direction ,StriFileNotFoundExceptionng Page,String Itérations)「,」ExceptionType「:」System.IO。「}

Fusion確實給了我一個錯誤代碼(0x80070002),它指出我得到進程監視器。這導致我到臨時彙編文件夾。現在我可能對此有錯。比較一個健康網站和病態網站的緩存文件,我注意到一些奇怪的東西。

  • 健康網站作爲所有來自BIN緩存中的DLL。
  • 生病的網站在緩存中缺少兩個存在於BIN中的DLL。

現在,我知道ASP.net傾向於說主庫缺失時,它實際上是缺少的引用庫之一。在目前的情況下,我不知道我能做些什麼來解決這個問題。這兩個DLL沒有在緩存中設置,因此當它試圖加載主DLL時,它無法從緩存中找到其他兩個DLL,並拋出主DLL上找不到的文件。

兩個罪魁禍首是:

  • PresentationCore.dll中
  • WindowsBase.dll中

回答

0

看起來下面的代碼實際上解決了這個問題。它檢查所有需要的程序集並加載缺失的程序集。我以前有過這樣的代碼,但它不起作用,因爲沒有!(Assemblée is System.Reflection.Emit.AssemblyBuilder) && (Assemblée.GetType().FullName != "System.Reflection.Emit.InternalAssemblyBuilder")不存在,並且代碼在.NET 4.0及以上版本中導致異常。這不是優雅的,但它能完成這項工作。

public static void Chargeur() 
{ 
    var Assemblées_Chargées = (from Assembly Assemblée in AppDomain.CurrentDomain.GetAssemblies() where !(Assemblée is System.Reflection.Emit.AssemblyBuilder) && (Assemblée.GetType().FullName != "System.Reflection.Emit.InternalAssemblyBuilder") && (!Assemblée.GlobalAssemblyCache) && (Assemblée.CodeBase != Assembly.GetExecutingAssembly().CodeBase) select Assemblée).ToList(); 

    var Chemins_Chargés = Assemblées_Chargées.Select(Assemblée => Assemblée.Location).ToArray(); 
    var Chemins_Référencés = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "*.dll"); 
    var Assemblées_NonChargées = Chemins_Référencés.Where(Références => !Chemins_Chargés.Contains(Références, StringComparer.InvariantCultureIgnoreCase)).ToList(); 

    Assemblées_NonChargées.ForEach(path => Assemblées_Chargées.Add(AppDomain.CurrentDomain.Load(AssemblyName.GetAssemblyName(path)))); 
} 
0

要troubleshot錯誤此kinf,您可以使用融合日誌,有關如何啓用它的說明和如何使用它可以在這裏找到:How to enable assembly bind failure logging (Fusion) in .NET

+0

Fusion確實給了我一個錯誤代碼(0x80070002),我將用新信息編輯我的主帖子。 – Rv3

+0

只是一個隨機,但根據這個:http://stackoverflow.com/questions/8407850/using-presentationcore-and-windowsbase-dlls-in-both-x64-and-x86-environments,有32位和64位這兩個程序集的位版本,嘗試在IIS和/或您的應用程序上強制使用32位模式,看看它是否有幫助。 – Rafael

+0

它已經在32位,之前嘗試過,並不是可悲的問題。 – Rv3

相關問題