我在一个项目中使用了Microsoft.Bcl.Async
package,该项目被另一个不使用异步功能的项目引用。
现在,在编译解决方案时(或仅在第二个项目中),我收到此错误警告:
我在两个项目中都使用此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>
我做错了什么?
我不想引用异步包dll。
我不能使用.Net 4.5目标。它必须是.Net 4。
所有项目的目标框架:.NET Framework 4
最佳答案
摘要:
您可以使用几种解决方法:
注意:当您运送依赖于Microsoft.Bcl.Async的库(与旧版Microsoft.CompilerServices.AsyncTargetingPack一样)时,必须使用上述二进制选项(System.Runtime,System。)。 Threading.Tasks,Microsoft.Threading.Tasks。*)和使用您的库的应用程序/程序包。
长话:
正如Peter指出的那样,由于它们的设计方式,这是仅对Microsoft.Bcl.Async而不是Microsoft.CompilerServices.AsyncTargetingPack才发生的已知问题。
Microsoft.Bcl.Async设计的一部分是(通过NuGet程序包)向后移植一些新的.NET 4.5程序集(System.Runtime,System.Threading.Tasks),以便它们可以在4.0上运行。 MSBuild不喜欢这样,它使它认为引用库已经依赖于较新的框架版本中的程序集。 Microsoft.Bcl.Build程序包中的解决方法可解决此问题。
关于c# - 如何正确使用Microsoft.Bcl.Async?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15551953/