Я создаю службу Windows С#, используя пакет Microsoft.Bcl.Async от Nuget.
Все собирается нормально, но когда я пытаюсь установить его на машину (XP или Win7‹ — только с .NET 4.0), я получаю ошибку 1001. Это использует InstallUtil ИЛИ InstallShield 2013 LE с классом установщика.
Я включил ведение журнала Fusion, и это та часть, где он не работает:
*** Assembly Binder Log Entry (5/1/2014 @ 1:23:13 PM) ***
The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.
Assembly manager loaded from: C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: User = someuser
LOG: DisplayName = System.Threading.Tasks, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
(Fully-specified)
LOG: Appbase = file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = InstallUtil.exe
Calling assembly : Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a.
===
LOG: This bind starts in LoadFrom load context.
WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load().
LOG: Using application configuration file: C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\InstallUtil.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: System.Threading.Tasks, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
LOG: The same bind was seen before, and was failed with hr = 0x80070002.
ERR: Unrecoverable error occurred during pre-download check (hr = 0x80070002).
Я даже пытался создать службу с нуля и сразу же установить Microsoft.Bcl.Async, чтобы получить тот же результат.
Я не ссылался на другую версию System.Threading.Tasks. Он находится в каталоге bin для моего сервиса. Я рыскал в течение нескольких дней, пытаясь понять это, и я в недоумении.
EDIT: Любопытно, что я могу удалить все ключевые слова «async» и «await» из своего проекта и теперь использовать любые асинхронные расширения, такие как «StreamWriter.WriteLineAsync(); и оставьте в проекте ссылки на Microsoft.Bcl.Async, и служба установится нормально. Как только я пытаюсь использовать «асинхронный» или «ожидающий» в своем коде, я начинаю испытывать эти проблемы.