MSBuild 失敗:project.json doesn't have runtimes section

奇妙的狀況,雖然解決了,但還不知道原因。先記錄一下...

在使用 Appveyor 來自動建置專案時出現錯誤訊息:

"C:\....MyProject.csproj" (default target) (4) ->
(ResolveNuGetPackageAssets target) ->
  C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Microsoft\NuGet\15.0\Microsoft.NuGet.targets(186,5): 
    error : Your project.json doesn't have a runtimes section. You should add '"runtimes": { "win": { } }' to your project.json and then re-run NuGet restore. [C:\....MyProject.csproj]

整個 solution 裡面,就只有這一個專案建置失敗,而這個專案是一個 Windows Forms 應用程式,目標平台為 .NET Framework 4.5.2。

Google 搜尋找到這帖:

MSBuild Your project.json doesn't have a runtimes sectionMSBuild Your project.json doesn't have a runtimes section

按照其中的回答來修改 .csproj 檔案,加入:

  <PropertyGroup>
    <RuntimeIdentifiers>win-x64;osx.10.11-x64;ubuntu.16.04-x64</RuntimeIdentifiers>
  </PropertyGroup>

之後,Appveyor 便可建置成功。可是,反倒變成我自己的開發機器上面的 Visual Studio 2017 無法成功建置專案。錯誤訊息如出一轍。

再嘗試修改 .csproj,把剛才加入的文字裡面的 "win-x64" 改成 "win":

  <PropertyGroup>
    <RuntimeIdentifiers>win;osx.10.11-x64;ubuntu.16.04-x64</RuntimeIdentifiers>
  </PropertyGroup>

本機和 Appveyor 便都可以建置成功了。GitHub 專案首頁終於又恢復綠色的「build passing」徽章 😆

附上 appveyor.yml 檔案內容:

image: Visual Studio 2017

before_build:
- cmd: dotnet restore src

build:
  project: src\NChinese.sln
  verbosity: normal

test: off

雖然解決了,但還是不知道造成此問題的真正原因。從搜尋結果來看,似乎不少人都碰到類似狀況,例如這個 issue(寫這篇筆記時的狀態仍為 Open):
https://github.com/Microsoft/vsts-tasks/issues/5931


買書 請我喝咖啡
Copyright © 2012. Huan-Lin 學習筆記 - All Rights Reserved
Powered by Blogger
Template Design by Cool Blogger Tutorials
Published by Templates Doctor