2

Windows サービス インストーラーが「エラー 1001。MyService.exe アセンブリでインストーラーの種類を取得できません」というメッセージが表示される場合。そのため、MyServiceInstaller をロードできません。Fusion のログに、Data.dll アセンブリを見つけようとして失敗したことが示されています。

問題は、サービス インストーラー オブジェクトを作成するために Data.dll を読み込む必要がないということです。それらの型を含むメソッドが呼び出される直前まで、型の読み込みがトリガーされなかったと思いました。一部の MyServiceInstaller メソッドは Data.dll から型を参照しますが、ctor は参照しません。

これは、MyService.exe をロードする、または MyServiceInstaller をプローブするという行為が、Data.dll のロードを呼び出すかのようです。

私が理解しているように、フュージョン ログでは、私が知る必要があることを教えてくれません。その時点では遅すぎます。そもそも Data.dll の読み込みをトリガーした MyServer.exe の読み込みまたは MyServiceInstaller のプローブについて知る必要があります。

Data.dll を MyService.exe の隣に配置できないというビジネス要件があります。そして確かに、それはこの問題を解決します。通常の実行時に Data.dll をロードするカスタム AssemblyResolve イベントがあります。

4

2 に答える 2

1

デバッガーをインストーラーにアタッチして、例外がスローされたときに中断するようにしてください (Visual Studio の [デバッグ/例外] で設定できます)。通常、アセンブリの読み込みが失敗したときにインストーラーで内部的にスローされるFileNotFoundExceptionまたは同様のものがあるはずですが、おそらく別の場所でキャッチされますが、例外がスローされているときにデバッガーを中断するようにすると (未処理のときではありません)、ステップインできます。問題の正確な原因を突き止めるのに役立つスタック トレースを取得します。

スタック トレースに次のようなものが表示されるはずです。

  • [Uninteresting native and / or external code]
  • SomeClassInYourInstaller.SomeMethod() <-- this is the responsible method
  • SomeOtherStuff.SomeMethod()
  • ...etc...
于 2009-10-14T22:13:57.857 に答える
0

おそらく、Data.dll で定義された型のインスタンス変数 (フィールド) があります。MyServiceInstaller が読み込まれると、インスタンスが作成されるとクラスがコンパイルされるため、使用されていない場合でも、すべてのフィールドの型が使用可能である必要があります。

于 2009-10-14T21:14:38.807 に答える