MS.NET构建中的FAKE错误失败但不是Mono

时间:2015-04-07 13:40:59

标签: mono travis-ci f#-fake

我为我的项目设置了CI版本,使用MS .Net(使用AppVeyor)和Mono(使用Travis CI)。

当前版本存在一个问题,即它尝试运行缺少的可执行文件。这导致AppVeyor build

失败
Starting Target: Run Unit Tests (==> BuildUnitTests, BuildIntegrationTests, BuildSampleApplication) 
Running build failed.
Error:
System.Exception: Start of process    HttpClient.UnitTests/bin/Release\HttpClient.UnitTests.exe failed. The system cannot find the file specified
   at Fake.ProcessHelper.directExec@218.Invoke(String message) in     C:\code\fake\src\app\FakeLib\ProcessHelper.fs:line 218
   at Fake.ProcessHelper.directExec(FSharpFunc`2 configProcessStartInfoF) in   C:\code\fake\src\app\FakeLib\ProcessHelper.fs:line 213
   at FSI_0001.Build.clo@68-3.Invoke(Unit _arg3) in C:\projects\http-fs\build.fsx:line 71
   at Fake.TargetHelper.runSingleTarget(TargetTemplate`1 target) in  C:\code\fake\src\app\FakeLib\TargetHelper.fs:line 411 

但Travis的构建只是继续,显然没有例外:

Starting Target: Run Unit Tests (==> BuildUnitTests, BuildIntegrationTests, BuildSampleApplication)
Cannot open assembly 'HttpClient.UnitTests/bin/Release/HttpClient.UnitTests.exe': No such file or directory.
Finished Target: Run Unit Tests

(见https://travis-ci.org/relentless/Http.fs/builds/57475713

这是失败(或不失败)的代码:

ProcessHelper.directExec (fun procInfo ->
  procInfo.FileName <- Path.Combine(unitTestsDir, "bin/Release", "HttpClient.UnitTests.exe")
) |> ignore

知道为什么存在这种差异,更重要的是如何在Mono上使它变得相同? (在这种情况下,我真的很喜欢构建失败)。当然,在这种情况下,我可以检查文件是否存在,但理想情况下我希望构建在任何问题上都失败。

修改

问题,特别是,当我认为它应该在Mono下构建时不会失败。似乎由于缺少exe而在MS .NET上引发的异常要么不在Mono上引发或吞没,导致构建在应​​该(IMO)失败时通过。

1 个答案:

答案 0 :(得分:0)

在我看来文件最终在bin / Debug中,而不是bin / Release。 在构建输出的第1244行,您有:

  

从&#39; /home/travis/build/relentless/Http.fs/HttpClient.UnitTests/obj/Release/HttpClient.UnitTests.exe'复制文件; to&#39; /home/travis/build/relentless/Http.fs/HttpClient.UnitTests/bin/Debug/HttpClient.UnitTests.exe'