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,等這個問題解決後再繼續編譯。