我为我的项目设置了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)失败时通过。
答案 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'