0

ファイルが存在し、名前が正しく、破損していません。「ビン」から出して戻すと、約5分間再び機能し、その後エラーベローが返されます。ファイルを更新する操作は問題ありません。ファイルを新たに公開し、名前を変更したり、移動したりすると、しばらくの間、サイトが再び機能します。

{"Message":"ファイルまたはアセンブリ \u0027Ouranos、Version=1.0.0.0、Culture=fr-CA、PublicKeyToken=null\u0027、またはその依存関係の 1 つを読み込めませんでした。 " 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) が返されたので、Process Monitor を取得するよう指示されました。これにより、一時的なアセンブリ フォルダーにたどり着きました。今、私はこれについて間違っているかもしれません。正常な Web サイトと問題のある Web サイトのキャッシュ ファイルを比較すると、奇妙なことに気付きました。

  • キャッシュ内の BIN からのすべての DLL としての健全な Web サイト。
  • 問題のある Web サイトには、BIN に存在するキャッシュ内の 2 つの DLL がありません。

さて、ASP.net はメイン ライブラリが欠落していると言う傾向があることを知っていますが、実際には欠落している参照ライブラリの 1 つです。この現在の状況では、その問題を解決するために何ができるかわかりません。2 つの DLL はキャッシュに設定されていないため、メインの DLL をロードしようとすると、キャッシュから他の 2 つの DLL を見つけることができず、メインの DLL に見つからないファイルがスローされます。

2人の犯人は次のとおりです。

  • プレゼンテーションコア.dll
  • WindowsBase.dll
4

2 に答える 2

0

この種類のエラーのトラブルシューティングを行うには、Fusionログを使用できます。これを有効にする方法と使用方法については、.NETでアセンブリバインド失敗ログ(Fusion)を有効にする方法を参照してください。

于 2012-09-17T22:53:39.560 に答える
0

次のコードは実際に問題を修正しているように見えます。アセンブリに必要なすべてのアセンブリをチェックし、不足しているものをロードします。私は以前にそのようなコードを持っていましたが、それがないと機能しませんでした。なぜなら、!(Assemblée is System.Reflection.Emit.AssemblyBuilder) && (Assemblée.GetType().FullName != "System.Reflection.Emit.InternalAssemblyBuilder")が存在せず、.net4.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))));
}
于 2012-10-07T08:44:50.067 に答える