2017-03-12 43 views
6

我有.NET Core projects我想在Mac和Linux上使用最新的Mono和.NET Core 1.0.1工具(基於MSBuild的csproj工具)構建Travis CI。他們的目標是netstandard1.6.1,net45net461。我從Travis CI得到的錯誤是:建設VS 2017 MSBuild csproj在Linux上使用Mono的項目

/usr/share/dotnet/sdk/1.0.1/Microsoft.Common.CurrentVersion.targets(1111,5): 錯誤MSB3644:爲框架 參考組件沒有找到「.NETFramework,Version = v4.5」。要解決此問題,請爲此框架版本安裝 SDK或定位套件,或將您的 應用重定向到您安裝了SDK 或定位套件的框架版本。請注意,程序集將從全局程序集緩存(GAC)中解析出 ,並將用於替代 引用程序集。因此,您的程序集可能不正確 針對您打算的框架。

單聲道不支持VS 2017基於MSBuild的csproj項目嗎?我怎樣才能讓我的項目構建?

+0

如果針對.NET框架的配置文件,您應該使用Windows(AppVeyor)。 Linux上的.NET Core工具應該能夠根據.NET Core配置文件進行編譯。單聲道不是必需的,它不是.NET Framework(提醒)。 –

+0

@LexLi:當你想測試一個項目的.NET Core構建(至少)在Linux上工作時,這是一個非常糟糕的解決方案。我現在正面臨這個問題......我希望我能夠添加一個答案。 –

+0

@JonSkeet絕對是一個不好的解決方案,它限制測試用例只能在Windows和.NET Framework上運行。但是在這種情況下,Mono沒有資格替換.NET Framework(因爲它可能會給測試用例增加額外的怪異性,而且我經常會面對我的開源項目)。 –

回答

4

有兩個選擇這裏,據我所知:

  • 用作this issue描述指向他們FrameworkPathOverride環境變量。

  • 限制你的Travis版本只能建立在.NET Core上。根據我的經驗,這是非常簡單的。

這裏的野田佳彥時間.travis.yml文件,我將使用Noda Time當我可以遷移 - 這是初步的,至少可以說,但它確實建...

language: csharp 
mono: none 
dotnet: 1.0.1 
dist: trusty 

script: 
    - dotnet restore src/NodaTime 
    - dotnet restore src/NodaTime.Test 
    - dotnet restore src/NodaTime.Serialization.Test 
    - dotnet build src/NodaTime -f netstandard1.3 
    - dotnet build src/NodaTime.Test -f netcoreapp1.0 
    - dotnet build src/NodaTime.Serialization.Test -f netcoreapp1.0 
    - dotnet run -p src/NodaTime.Test/*.csproj -f netcoreapp1.0 -- --where=cat!=Slow 
    - dotnet run -p src/NodaTime.Serialization.Test/*.csproj -f netcoreapp1.0 

一些注意事項這樣的:

  • 不像早期的軟件開發工具包,我們現在需要單獨還原每個項目 - 無大「的dotnet在頂層還原」 :(
  • 當我沒有在dist: xenial上運行時,我很驚訝,但它沒有。 (它聲稱環境不支持.NET Core。)我的猜測是這會改變。
  • 我們使用NUnit的,而且目前在新的SDK測試的唯一方法是使用NUnitLite,因此dotnet run運行測試
  • 我微微一驚,我不能只指定目錄名稱爲dotnet run(按照dotnet restoredotnet build),但似乎是事情的方式。我要追捕一個bug報告...

在任何情況下,我建議具有基於Windows的CI構建來檢查一切建立和適用於Windows(理想情況下測試每個框架你支持)。

+0

我正在使用Cake(我也推薦它用於Nodatime)並解決了第二個選項,直到Microsoft獲得對Mono的支持(有一個關於它的GitHub問題)。 –

+1

@MuhammadRehanSaeed:我有意向調查Cake,但現在我只想讓所有事情都得到解決,而沒有比我真正需要的任何更改。我的最後一個攔截器是docfx :( –

+0

這個答案可能已經過時了,現在看到其他答案,也就是說,我還沒有完成它的工作, –

0

截至昨天(5月5日),@dasMulli指出,Mono發佈了可與.NET Core搭配使用的Mono 5.0 Beta 2(5.0.0.94)!這裏是his post on dotnet/sdk#335。下面是最新的beta release

我.travis.yml文件的鏈接的樣子:

sudo: required 
dist: trusty 
language: csharp 
solution: MySolution.sln 
mono: 
    - beta 
dotnet: 1.0.3 

install: 
    - nuget restore MySolution.sln 
    - dotnet restore MySolution.sln 

script: 
    - msbuild /t:Rebuild MySolution.sln 
+0

我的travis.yml安裝了目前版本爲5.2.0的單聲道'latest',我的版本仍然無法構建一個針對netstandard和net45的.NET Core項目https:// travis -ci.org/RehanSaeed/Serilog.Exceptions/jobs/266445606 –

相關問題