首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Microsoft.Bcl.Async对吗?

如何使用Microsoft.Bcl.Async对吗?
EN

Stack Overflow用户
提问于 2013-03-21 15:40:33
回答 2查看 17.3K关注 0票数 26

我在一个项目中使用Microsoft.Bcl.Async 套餐,这个项目是另一个不使用异步特性的项目引用的。

现在,当我编译解决方案(或者只编译第二个项目)时,我收到了这个错误警告:

无法解析主引用"XYZ.dll“,因为它间接依赖于框架程序集"System.Runtime、Version=1.5.11.0、Culture=neutral、PublicKeyToken=b03f5f7f11d50a3a”,而后者在当前目标框架中无法解决。".NETFramework,Version=v4.0“。要解决这个问题,要么删除引用"XYZ.dll“,要么将您的应用程序重定向到包含"System.Runtime,Version=1.5.11.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”的框架版本。

我在两个项目中都使用这个app.config:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:bcl="urn:schemas-microsoft-com:bcl">
      <dependentAssembly bcl:name="System.Runtime">
        <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.5.16.0" newVersion="2.5.16.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.5.16.0" newVersion="2.5.16.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

我做错什么了?

我不想引用异步包dll。

我不能使用.Net 4.5目标。一定是.Net 4。

所有项目的目标框架:.NET框架4

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-21 21:42:37

摘要

有几种解决办法可供您使用:

  1. 将Microsoft.Bcl.Async包安装到引用项目。
  2. 将Microsoft.Bcl.Build包安装到引用项目。这包含了实际的修复,并且仅仅是一个构建时依赖项.当您这样做时,您必须在项目的App.Config中进行适当的绑定重定向(例如上面列出的内容)--不管它是类库、web项目还是可执行文件。
  3. 如果您不想依赖于任何包,请获取PropertyGroup元素在Microsoft.Bcl.targets文件中的内容(安装在Microsoft.Bcl.Build中),并将其插入到引用项目底部的最后一个导入元素之后。

Microsoft.CompilerServices.AsyncTargetingPack),备注:当您提供一个依赖于Microsoft.Bcl.Async的库(与旧的Microsoft.Bcl.Async一样,您必须将这些二进制文件(System.Runtime、System.Threading.Tasks、Microsoft.ThreadingT.*)与使用您的库的应用程序/包一起发送)时,您在上面选择的。

长篇小说

正如Peter所指出的,这是一个已知的问题,由于设计方式的关系,这个问题只发生在Microsoft.Bcl.Async而不是Microsoft.Bcl.Async。

Microsoft.Bcl.Async的部分设计是支持(通过NuGet包)一些新的.NET 4.5程序集(System.Runtime,System.Threading.Tasks),以便它们能够在4.0上运行。MSBuild不喜欢这种情况,它使它相信引用库从更新的框架版本中获取了对程序集的依赖。Microsoft.Bcl.Build包中的解决方案修复了这个问题。

票数 23
EN

Stack Overflow用户

发布于 2013-03-21 16:32:28

使用针对Visual 11的异步目标包代替。

Install-Package Microsoft.CompilerServices.AsyncTargetingPack

如果您喜欢使用Microsoft.Bcl.Async预发布,则必须将其添加到所有项目中。Bcl.Async的下一个版本应该对消息传递进行改进,以更好地说明这一点。

如果您正在使用VS 2010,我所知道的唯一能让您异步/等待的东西是AsyncCTP;因此,在VS 2010中使用Microsoft.Bcl.Async是没有意义的。

最新情况:

W.R.T到Microsoft.Bcl.Async: MSB警告周围的问题(“不能是resolved...indirect依赖项.”)。都是已知的和正在被解决的。在将来的一些更新中(对MSBuild和Microsoft.Bcl.Async),这将被修复,您将不必在两个项目中都包括Microsoft.Bcl.Async。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15551953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档