I have an executable (Foo.exe) and a library Bar.dll. Both binaries are NOT strong name signed. The Bar.dll library depends on the executable file and has it specified in its manifest in such manner:
<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>
I do a roundtrip from Foo.exe -> msil -> Foo.exe with ildasm and ilasm. Decompilation with ildasm generates a single .il file, .res file and multiple .resources files. I recompile the application in such manner:
ilasm Foo.il /resource=Foo.res
After recompilation the application works and can be launched. The problem now is that the library Bar.dll that depends on the executable fails to load it (the Foo.exe executable) after recompilation. This is what fusion log gives me:
*** 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.
Now before the recompilation the file loads successfully and the only difference in the fusion log are last 4 lines:
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.