pun*_*r76 26 c# wpf asynchronous .net-4.0 async-await
我在项目中使用该Microsoft.Bcl.Async 包,该项目由另一个不使用异步功能的项目引用.
现在,当我编译解决方案(或仅第二个项目)时,我收到此错误警告:
无法解析主要引用"XYZ.dll",因为它对框架程序集"System.Runtime,Version = 1.5.11.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"具有间接依赖性,无法在当前目标中解析框架." .NETFramework,版本= V4.0" .要解决此问题,请删除引用"XYZ.dll"或将应用程序重新定位到包含"System.Runtime,Version = 1.5.11.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"的框架版本.
我在这两个项目中使用这个app.config:
<?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>
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
我不想引用异步包dll.
我不能使用.Net 4.5目标.它必须是.Net 4.
所有项目的目标框架:.NET Framework 4
Dav*_*ean 23
摘要:
您可以使用以下几种解决方法:
将Microsoft.Bcl.Async程序包安装到引用项目.
将Microsoft.Bcl.Build包安装到引用项目.这包含实际修复,并且仅仅是构建时依赖性.当你做到这一点,你必须在项目App.Config中相应的绑定重定向(如你上面列出的) -不管它是一个类库,Web项目或可执行文件.
如果您不希望依赖任何包,请获取Microsoft.Bcl.targets文件(随Microsoft.Bcl.Build安装)中的PropertyGroup元素的内容,并在最后一次导入后将其插入引用项目的底部元件.
注意:上面选择哪个选项,当您发布依赖于Microsoft.Bcl.Async的库时(与旧的Microsoft.CompilerServices.AsyncTargetingPack一样),您必须发送这些二进制文件(System.Runtime,System.Threading.任务,Microsoft.Threading.Tasks.*)与使用您的库的应用程序/包.
长篇故事:
正如彼得所指出的,这是一个已知的问题,只有Microsoft.Bcl.Async而不是Microsoft.CompilerServices.AsyncTargetingPack,因为它们的设计方式.
Microsoft.Bcl.Async的设计的一部分是反向移植(通过NuGet包)一些新的.NET 4.5组件(System.Runtime,System.Threading.Tasks),因此,他们将在4.0上运行.MSBuild不喜欢这样,它使它相信引用库已经从较新的框架版本依赖于程序集.Microsoft.Bcl.Build包中的解决方法修复了此问题.