2

実行可能ファイル(Foo.exe)とライブラリBar.dllがあります。両方のバイナリは厳密な名前で署名されていません。Bar.dllライブラリは実行可能ファイルに依存しており、マニフェストで次のように指定されています。

<dependency>
    <dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="Foo.exe" size="334336">
      <assemblyIdentity name="Foo" version="1.2.3.4" language="neutral" processorArchitecture="msil" />
    </dependentAssembly>
</dependency>

ildasmとilasmを使用してFoo.exe->msil->Foo.exeからラウンドトリップします。ildasmを使用して逆コンパイルすると、単一の.ilファイル、.resファイル、および複数の.resourcesファイルが生成されます。私はそのような方法でアプリケーションを再コンパイルします:

ilasm Foo.il /resource=Foo.res

再コンパイル後、アプリケーションは機能し、起動できます。問題は、実行可能ファイルに依存するライブラリBar.dllが、再コンパイル後にロードに失敗することです(Foo.exe実行可能ファイル)。これは、融合ログが私に与えるものです:

   *** Assembly Binder Log Entry  (11/12/2012 @ 5:00:38 PM) ***

The operation failed.
Bind result: hr = 0x8013101b. No description available.

Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Running under executable  C:\Program Files (x86)\SomeApplication\Something.EXE
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = Bartek-W7\Bartek
LOG: DisplayName = Bar, Version=1.2.3.4, Culture=neutral, PublicKeyToken=null
 (Fully-specified)
LOG: Appbase = file:///C:/Program Files (x86)/FooBar
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = NULL
Calling assembly : Bar, Version=1.2.3.4, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Application configurtion file not found.
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Program Files (x86)/FooBar/Foo.dll
LOG: Attempting download of new URL file:///C:/Program Files (x86)/FooBar/Foo/Foo.dll
LOG: Attempting download of new URL file:///C:/Program Files (x86)/FooBar/Foo.exe
LOG: Assembly download was successful. Attempting setup of file: C:/Program Files (x86)/FooBar/Foo.exe
LOG: Entering download cache setup phase.
ERR: Error extracting manifest import from file (hr = 0x8013101b).
ERR: Setup failed with hr = 0x8013101b.
ERR: Failed to complete setup of assembly (hr = 0x8013101b). Probing terminated.

再コンパイルの前に、ファイルは正常にロードされ、フュージョンログの唯一の違いは最後の4行です。

LOG: set name: Foo, Version=1.2.3.4, Culture=neutral, PublicKeyToken=null
WARNING: found a duplicate set during cache setup
LOG: Bind successful.
LOG: Bind is in default load context.
4

1 に答える 1

4

エラー:ファイルからマニフェストインポートを抽出中にエラーが発生しました(hr = 0x8013101b)

エラーコード8013101bはCOR_E_NEWER_RUNTIMEです。つまり、アセンブリには、実際に読み込まれるバージョンよりも新しいバージョンのCLRが必要です。そのための非常に簡単な説明があります、あなたはおそらくilasm.exeの間違ったバージョンを使用しています。バージョン2ではなくバージョン4。

v4.0.30319のものではなく、必ずC:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727\ilasm.exeを使用してください。

于 2012-12-11T19:07:55.390 に答える