Azure自动构建失败

时间:2013-06-09 15:19:46

标签: c# azure build tfs asp.net-web-api

我最近在visualstudio.com上创建了项目,并在azure上启用了连续构建。我创建了web api项目,并创建了一些模型和api控制器。然后我在网上进行了部署,这很酷。然后我通过NuGet更新了所有依赖项。 Build在本地运行良好,也在我的本地机器上运行app。然后我检查了tfs,自动部署踢了,生成错误。 它说:

C:\a\src\HitchStopApi\packages\Microsoft.Bcl.Build.1.0.6\tools\Microsoft.Bcl.Build.targets (74): The "EnsureBindingRedirects" task could not be loaded from the assembly C:\a\src\HitchStopApi\packages\Microsoft.Bcl.Build.1.0.6\tools\Microsoft.Bcl.Build.Tasks.dll. Could not load file or assembly 'file:///C:\a\src\HitchStopApi\packages\Microsoft.Bcl.Build.1.0.6\tools\Microsoft.Bcl.Build.Tasks.dll' or one of its dependencies. The system cannot find the file specified. Confirm that the <UsingTask> declaration is correct, that the assembly and all its dependencies are available, and that the task contains a public class that implements Microsoft.Build.Framework.ITask.

在我的本地机器构建中,我收到了测试项目的警告

D:\Programming\Projects\HitchStop\HitchStopApi\packages\Microsoft.Bcl.Build.1.0.6\tools\Microsoft.Bcl.Build.targets(220,5): warning : Project must install nuget package Microsoft.Bcl.

在本地我使用.NET 4.5,MVC4,Entity framework 5.0 ......

2 个答案:

答案 0 :(得分:10)

这有点像一个错误,并记录在几个地方。 Bcl.Build不是构建在TFS上所需的项目,因此如果它不存在,您只需要告诉TFS不要包含它。为此,打开.csproj文件(对于引用Bcl.Build的每个项目)并更改以下内容:

<Import Project="..\packages\Microsoft.Bcl.Build.1.0.6\tools\Microsoft.Bcl.Build.targets" />

添加条件:

<Import Project="..\packages\Microsoft.Bcl.Build.1.0.6\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.6\tools\Microsoft.Bcl.Build.targets')" />

注意:如果您通过Nuget更新Bcl.Build,它还会更新您的项目文件,并且需要重新执行以下操作。如果您不想在每次更新/参考时丢失它,请创建第二个副本并将其注释掉。

相关参考文献(同一问题,不同的表现形式):

http://social.msdn.microsoft.com/Forums/en-US/TFService/thread/7bd2e96b-552a-4897-881c-4b3682ff835e

https://connect.microsoft.com/VisualStudio/feedback/details/788981/microsoft-bcl-build-targets-causes-project-loading-to-fail

https://nuget.codeplex.com/workitem/3135

更新:微软就此撰写了官方博客。虽然上述情况在某些情况下确实有效,但并不能保证。微软和NuGet团队正在合作开发解决方案,但与此同时提供了3个(更好的?)解决方案选项:

http://blogs.msdn.com/b/dotnet/archive/2013/06/12/nuget-package-restore-issues.aspx

  1. 停止使用包还原并签入所有包文件
  2. 在构建项目之前显式运行包还原
  3. 签入.targets文件

答案 1 :(得分:3)

描述了您的问题here 解: 1.添加虚拟项目(例如NugetHelper),使用

添加package.config
<package id="Microsoft.Bcl.Build" version="1.0.6" targetFramework="net45" />
  1. 打开菜单 - &gt;项目 - &gt; ProjectDependencies并使NugetHelper在解决方案中的其他项目之前构建

  2. 替换

  3. &lt; Import Project =“.. \ packages \ Microsoft.Bcl.Build.1.0.6 \ tools \ Microsoft.Bcl.Build.targets”/&gt;

    &lt; Import Project =“.. \ packages \ Microsoft.Bcl.Build.1.0.6 \ tools \ Microsoft.Bcl.Build.targets”Condition =“Exists('.. \ packages \ Microsoft.Bcl.Build .1.0.6 \ tools \ Microsoft.Bcl.Build.targets')“/&gt;

    这将在将Microsoft.Bcl.Build.targets实际加载到主项目中之前将其恢复