使用Clickonce部署Microsoft.Bcl.Async

时间:2013-08-28 21:23:14

标签: .net vb.net asynchronous base-class-library

我有一个VB.NET应用程序崩溃,出现以下错误:

System.IO.FileNotFoundException: Could not load file or assembly 'System.Threading.Tasks, Version=2.5.19.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. File name: 'System.Threading.Tasks, Version=2.5.19.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'

我正在尝试使用Microsoft.Bcl.Async库。我通过Nuget在实际使用Async / Await调用的项目和引用它的项目上安装了它。一切都在我的计算机上完美运行,但是当我在另一台计算机上发布和测试时,当我尝试使用Async / Await的部分时,我的程序崩溃了。

System.Threading.Tasks在Copy Local设置为true的两个项目中都被引用。在Copy Local设置为true的两个项目中引用Microsoft.Threading.Tasks。我已经看到the other thread关于此问题,它已安装在相关项目中。这些是我的app.config文件中包含的行:

  <dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.5.19.0" newVersion="2.5.19.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.5.19.0" newVersion="2.5.19.0" />
  </dependentAssembly>

设置此内容我错过了什么?如果您需要更多信息,请告诉我。谢谢!

2 个答案:

答案 0 :(得分:9)

我在项目网站上发现了一个解决方法:

http://blogs.msdn.com/b/bclteam/p/asynctargetingpackkb.aspx

分辨率

这是因为ClickOnce无法部署某些必需的程序集。要解决此问题,请执行以下操作:

1.右键单击项目,然后选择添加现有项

2.浏览Microsoft.Bcl net40包文件夹

3.在文件名文本框中输入

4.Holding CTRL,选择System.Runtime.dll和System.Threading.Tasks.dll

5.单击“添加”按钮旁边的向下箭头,然后选择“添加为链接”

6.在Solution Explorer中,按住CTRL选择System.Runtime.dll和System.Threading.Taks.dll

7.右键单击所选内容,选择“属性”,然后将“复制到输出目录”更改为“始终复制”

8.Republish

答案 1 :(得分:1)

点击一次只会包含3个主要的Microsoft.Threading.Tasks.dllMicrosoft.Threading.Tasks.Extensions.dllMicrosoft.Threading.Tasks.Extensions.Desktop.dll

enter image description here

但是,当您添加未包含在可分发System.Runtime.dllSystem.Threading.Tasks.dll中的nuget包时,还有一些更多的DLL是添加的两个依赖项。您可以看到{{1这两个引用的属性在你的项目中,而不是在正常位置。

enter image description here

我不完全确定如何修复它,但至少现在你知道问题是什么了。