DNX是.NET Execution Environment,前身是XRE,XRE的前身是KRuntime,專案網址:https://github.com/aspnet/DNX 。

簽出DNX的程式碼:

git clone https://github.com/aspnet/DNX.git --recursive

安裝Mono:

apt-get install mono-complete

執行./build.sh命令進行編譯,出現錯誤:

WARNING: Invalid certificate received from server. Error code: 0xffffffff800b010a
WARNING: Invalid certificate received from server. Error code: 0xffffffff800b010a
WARNING: Invalid certificate received from server. Error code: 0xffffffff800b010a
WARNING: Invalid certificate received from server. Error code: 0xffffffff800b010a
Unable to find package 'KoreBuild'.
WARNING: Error getting response stream (Write: The authentication or decryption has failed.): SendFailure
WARNING: Error getting response stream (Write: The authentication or decryption has failed.): SendFailure
Unable to find version '0.2' of package 'Sake'.

通過下面的命令可以修復這個問題:

CERTMGR=/usr/local/bin/certmgr
sudo $CERTMGR -ssl -m https://go.microsoft.com
sudo $CERTMGR -ssl -m https://nugetgallery.blob.core.windows.net
sudo $CERTMGR -ssl -m https://nuget.org
sudo $CERTMGR -ssl -m https://www.myget.org/F/aspnetvnext/
mozroots --import --sync

繼續編譯,出現下面的錯誤:

./build.sh: 31: ./build.sh: source: not found
./build.sh: 35: ./build.sh: dnvm: not found

將build.sh檔案中的第一行由 #!/bin/sh  改為  #!/usr/bin/env bash ,錯誤消失。

錯誤的原因是:在Ubuntu中,/bin/sh指向的是/bin/dash,而dash不支援source命令,詳見source command not found in sh shell

繼續編譯,出現下面的錯誤:

info: Exec
info: program: kpm
info: commandline: restore
info: workingdir: src/Microsoft.Framework.ApplicationHost
warn: ApplicationName='kpm', CommandLine='restore', CurrentDirectory='src/Microsoft.Framework.ApplicationHost',
Native error= Cannot find the specified file

檢視makefile.shade檔案(這是Sake的配置檔案),發現問題出在下面的配置部分

for each='var projectFile in Files.Include("src/*/project.json")'
exec program='cmd' commandline='/C kpm restore' if='!IsMono' workingdir="${Path.GetDirectoryName(projectFile)}"
exec program='kpm' commandline='restore' if='IsMono' workingdir="${Path.GetDirectoryName(projectFile)}"
for each='var projectFile in Files.Include("test/*/project.json")'
exec program='cmd' commandline='/C kpm restore' if='!IsMono' workingdir="${Path.GetDirectoryName(projectFile)}"
exec program='kpm' commandline='restore' if='IsMono' workingdir="${Path.GetDirectoryName(projectFile)}"
for each='var projectFile in Files.Include("samples/*/project.json")'
exec program='cmd' commandline='/C kpm restore' if='!IsMono' workingdir="${Path.GetDirectoryName(projectFile)}"
exec program='kpm' commandline='restore' if='IsMono' workingdir="${Path.GetDirectoryName(projectFile)}"

出錯是因為找不到kpm命令。

已經在github上針對這個問題提交了issue,等這個問題解決後再繼續編譯。