Пожалуйста, помогите мне с этим, я писал консольное приложение, используя AsyncCtpLibrary и компилятор C # 5 ctp. В первый раз, когда мне пришлось запустить ожидающий код, я получил следующее:
System.BadImageFormatException was unhandled
Message=An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
Source=AsyncCtpLibrary
StackTrace:
Server stack trace:
at [...].<Execute>d__1c.MoveNext()
at [...].Execute()
at [...].<Move>d__1d.MoveNext() in[..]:line 266
Exception rethrown at [0]:
at System.Runtime.CompilerServices.AsyncVoidMethodBuilder.<SetException>b__1(Object state)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
InnerException:
Не хватает ли мне DLL, на которую нужно ссылаться?
важные новые вещи
Мой метод ошибки выглядит так:
public async override Task<bool> Execute()
{
//do stuff
await stuff;
//do other stuff
await base.Execute()
//do other stuff
return true;
}
Я последовал совету Джона Скита, пытаясь понемногу воссоздать ошибку, и теперь я могу сказать, что строка await base.Execute () - убийца! Если я закомментирую эту строку, все будет работать, если я оставлю ее, вызов моего метода НЕМЕДЛЕННО завершается с ошибкой (не при достижении base.Execute ()). Итак, я предполагаю, что компилятор ctp делает что-то странное. Почему? Чего я никогда не должен делать? Насколько велика ошибка?
старые вещи:
РЕДАКТИРОВАТЬ:
Что касается 32-битной / 64-битной проблемы, моя система 32-битная (внутри виртуальной машины, заметьте), и, насколько мне известно, AsyncCtpLibrary.dll не содержит неуправляемого кода. Все мои проекты (библиотеки классов и одно консольное приложение) имеют такие вкладки сборки, как это:
Что может быть все еще неправильным?
РЕДАКТИРОВАТЬ: Я также проверил программу просмотра Fusion log , библиотека AsyncCtpLibrary загружается без ошибок:
*** Assembly Binder Log Entry (6/10/2011 @ 9:04:11 PM) ***
The operation was successful.
Bind result: hr = 0x0. The operation completed successfully.
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable C:\Users\Daver\Documents\Visual Studio 2010\Projects\[...]\bin\Debug\MyApp.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: User = WIN-N74LV38NLV3\Daver
LOG: DisplayName = AsyncCtpLibrary, Version=1.0.4107.18181, Culture=neutral, PublicKeyToken=31bf3856ad364e35
(Fully-specified)
LOG: Appbase = file:///C:/Users/Daver/Documents/Visual Studio 2010/Projects/[...]/bin/Debug/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = MyApp.exe
Calling assembly : MyLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Users\Daver\Documents\Visual Studio 2010\Projects\[...]\bin\Debug\MyApp.exe.Config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: AsyncCtpLibrary, Version=1.0.4107.18181, Culture=neutral, PublicKeyToken=31bf3856ad364e35
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///C:/Users/Daver/Documents/Visual Studio 2010/Projects/[...]/bin/Debug/AsyncCtpLibrary.DLL.
LOG: Assembly download was successful. Attempting setup of file: C:\Users\Daver\Documents\Visual Studio 2010\Projects\[...]\bin\Debug\AsyncCtpLibrary.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: AsyncCtpLibrary, Version=1.0.4107.18181, Culture=neutral, PublicKeyToken=31bf3856ad364e35
LOG: Binding succeeds. Returns assembly from C:\Users\Daver\Documents\Visual Studio 2010\Projects\[...]\bin\Debug\AsyncCtpLibrary.dll.
LOG: Assembly is loaded in default load context.
Я также проверил код IL компилятора
-generated class 'MoveNext (), и единственными сборками, на которые он ссылается ([assemblyName]), являются mscorlib, System.Core и AsyncCtpLibrary.
Я проверил манифест как моей dll, так и AsyncCtpLibrary, мой сказал .corflags 0x00000003 // ТРЕБУЕТСЯ ТОЛЬКО 32 БИТА
, AsyncCtpLibrary сказал .corflags 0x00000009 // ТОЛЬКО
, я не уверен, может ли это быть проблемой.
Пожалуйста, помогите, я ' м без идей!