1

GACを介してプロジェクト ソリューションから他のアセンブリを参照しているプロジェクトからアセンブリを参照しているサードパーティのワークフロー ソフトウェア (Captaris Teamplate) があります。

アプリケーションが実行されると、Captaris Teamplate メソッドを呼び出してワークフロー プロセスを作成し、GAC のプロジェクト アセンブリを使用してデータをデータベースに保存します。

問題は、プロジェクトをコンパイルし、GAC からアセンブリを削除してそれらを新しいバージョンに置き換えるときですが、プロジェクト全体を実行すると、Captaris Teamplate がエラーをスローします。

例外の種類: System.IO.FileNotFoundException
メッセージ: ファイルまたはアセンブリ名 VBAssembly、またはその依存関係の 1 つが見つかりませんでした。
FileName: VBAssembly
FusionLog: === Pre-bind state information ===
LOG: DisplayName = VBAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null

つまり、アセンブリ DLL ファイルの名前はわかりません。探しているバージョンも見つけようとしています。このような問題のトラブルシューティングは、暗闇での撮影のようなもので、ASP.NET 一時ファイル フォルダー、プロジェクト フォルダー、および Web サイト フォルダー (inetpub) に保持されている古いアセンブリの削除、再起動など、エラーのテスト、エラーの取得、他の古いアセンブリの検索など。

だから私の質問は:

  1. アセンブリの名前や欠落しているバージョンなど、この例外に関する詳細情報を抽出できる手法はありますか?
  2. コンパイル時にシステムから古いアセンブリ バージョンをすべてクリーンアップする簡単な方法はありますか?
  3. このDLL Hellおよび/または Captaris Teamplateに対処するための他の提案はありますか?

Captaris Workflow 5.0 を搭載した Visual Studio 2003 で ASP.NET バージョン 1.1 を使用しています。

4

7 に答える 7

1

または、 .NET Reflectorを使用できます。

ただし、ベンダーに電話して助けを求めることもできます。ほとんどの場合、これらの担当者は自社製品にかなりのプライドを持っているため、メールやチャットで問題を解決するために時間を割いてくれます。私が使用していたサードパーティのスプレッドシート コンポーネントで同様の問題に遭遇しました。その会社はドイツにありましたが、彼らにコンポーネントを再コンパイルしてもらい、彼らが私を送ったときに、問題をかなり迅速に解決することができました。新しい DLL は問題なく動作しました。

于 2008-11-26T16:36:55.047 に答える
1

もう 1 つの方法は、必要なアセンブリのバージョンを web.config で "強制的に" 参照することです。Web アプリケーションで適切なバージョンの Crystal Reports にアクセスしていることを確認するために、web.config にあるもののサンプルを次に示します...

<assemblies>       
   <add assembly="CrystalDecisions.Web, Version=11.5.3700.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
   <add assembly="CrystalDecisions.Shared, Version=11.5.3700.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
   <add assembly="CrystalDecisions.ReportSource, Version=11.5.3700.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
   <add assembly="CrystalDecisions.Enterprise.Framework, Version=11.5.3300.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>            
</assemblies>

ライブラリを参照するために同じことを行うことができると確信しています。参照する PublicKeyToken があるように、それらが強力な命名キーを持っていることを確認する必要があります。

于 2008-11-26T16:03:35.257 に答える
1

おそらく最も効果的な方法は、FusLogVW.exe(.NET Framework SDK の一部です。Assembly Binding Log Viewer (Fuslogvw.exe)を参照) を実行することです。これにより、発生したすべてのバインド エラーがログに記録されます。そうすれば、失敗したバインド試行をアプリケーションから一覧表示できます。

于 2008-12-09T12:55:36.877 に答える
1

可能であれば、GAC は避けてください。それはDLL Hellに役立ちます。VBAssembly は実際には管理されていない可能性があり、WINDOWS/system32ディレクトリから削除されている可能性があります。

于 2008-11-26T15:57:06.813 に答える
1

おそらく、XXX から GAC に削除したアセンブリの要求を新しい場所にリダイレクトするバインド ポリシーを作成できます。バインディング ポリシーを参照してください。

于 2008-11-26T16:09:39.267 に答える
1

Dependency Walkerを使用して、欠落している依存関係を見つけます。

于 2008-11-26T16:26:37.517 に答える
0

開始点は、'Clean Solution'オプションを使用してからソリューションを構築することです。

于 2008-11-26T13:46:02.913 に答える