13

我已经为 .NET Framework 4、Silverlight 4 和 5 以及 Windows Phone 7.5 和 8 安装了 NuGet Package Async。

Version 1.0.16

我使用的是 Microsoft .NET 4.0,但由于 Web 托管包限制,我无法升级。(可悲!)

我的测试代码:(我正在使用 Linq to SQL Query 代替 Thread.Sleep)

public class Search
{
public async Task<List<Result>> GetResults(string SearchString)
{
await System.Threading.Tasks.Task.Factory.StartNew(() => Thread.Sleep(1000));
}
}

我的错误:

Cannot await 'System.Threading.Tasks.Task'

http://blogs.msdn.com/b/bclteam/p/asynctargetingpackkb.aspx谈到了错误,但这并不是真正的答案,因为我没有使用 VB,而且我已经在做解决方案描述的事情了。

[编辑] 我收到警告:

Warning 4   The primary reference "Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" could not be resolved because it has an indirect dependency on the framework assembly "System.Runtime, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which could not be resolved in the currently targeted framework. ".NETFramework,Version=v4.0". To resolve this problem, either remove the reference "Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" or retarget your application to a framework version which contains "System.Runtime, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".

谢谢你的帮助。

4

2 回答 2

34

什么样的恶梦!我发现了问题。

Microsoft.Bcl

在我的情况下,Microsoft.Bcl 和 Microsoft.Bcl.Async 似乎存在冲突。我使用以下命令删除了 Microsoft.Bcl 和 Microsoft.Bcl.Async:

uninstall-package Microsoft.Bcl.Async -force

然后:

uninstall-package Microsoft.Bcl -force

然后再次安装:

install-package Microsoft.Bcl.Async

现在它很有魅力。我不能相信这个?也不确定为什么首先将 Microsoft.Bcl 留在那里。删除 Microsoft.Bcl.Async 后,它会被抛在后面。到目前为止一切正常。还有一些测试要做。

如果其他人对 NuGet 包有疑问,您可以自担风险尝试:

update-package -pre

这将尝试回滚已更新的软件包。这就是我发现问题的方式。

[编辑] 值得注意的是,在进一步测试后,卸载 Microsoft.Bcl.Async 时不会删除 Microsoft.Bcl。Microsoft.Bcl 可以单独更新,并且 Microsoft.Bcl.Async 之外的此更新似乎是一个问题。Microsoft.Bcl 是在安装 Microsoft.Bcl.Async 时安装的。

希望这对其他人有帮助!

于 2013-10-18T06:02:24.300 回答
2

修改你的配置如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-[version]" newVersion="[version]" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-[version]" newVersion="[version]" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

将 [version] 替换为您所引用的版本(例如 2.5.10.0 System.RuntimeSystem.Threading.Tasks

于 2013-10-18T00:57:02.247 回答