2016-12-23 58 views
0

我們試圖通過.NET Core連接到MySQL數據庫。 一切工作在本地,但在我們的服務器上,gitlab-ci運行失敗。因此失敗的構建。MySQL - > .NET Core Dependency error(MySql.Data)

拋出的錯誤:error NU1001: The dependency MySql.Data >= 7.0.6-IR31 could not be resolved.這很奇怪,因爲它在我們的本地機器上工作,但不在docker中運行的CI上。

正在運行dotnet restoredotnet run本地工作。 dotnet restore也可以在服務器上運行,您可以看到安裝了MySql.Data軟件包。然而,在運行unittests時,因爲無法解決依賴關係,所以它會中斷。也許不是Linux兼容?

我們做錯了什麼?

的project.json文件:

{ 
    "dependencies": { 
    "Microsoft.NETCore.App": { 
     "version": "1.0.0", 
     "type": "platform" 
    }, 
    "Microsoft.AspNetCore.Mvc": "1.0.0", 
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0", 
    "Microsoft.AspNetCore.Diagnostics": "1.0.0", 
    "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.0.0", 
    "Microsoft.Extensions.Configuration": "1.0.0", 
    "Microsoft.Extensions.Configuration.CommandLine": "1.0.0", 
    "Microsoft.Extensions.Configuration.Binder": "1.0.0", 
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0", 
    "Microsoft.Extensions.Configuration.Json": "1.0.0", 
    "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0", 
    "Microsoft.Extensions.Logging": "1.0.0", 
    "Microsoft.Extensions.Logging.Console": "1.0.0", 
    "Microsoft.Extensions.Logging.Debug": "1.0.0", 
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0", 
    "Microsoft.EntityFrameworkCore": "1.0.0", 
    "DotNetAirbrake": "1.0.33", 
    "Geitenbelang.AnimalManager.Api.Models": "1.0.0-*", 
    "Geitenbelang.AnimalManager.Api.Database": "1.0.0-*", 
    "AutoMapper": "5.1.1", 
    "MySql.Data.EntityFrameworkCore": "7.0.6-IR31" 
    }, 

    "frameworks": { 
    "netcoreapp1.0": {} 
    }, 

    "buildOptions": { 
    "emitEntryPoint": true, 
    "preserveCompilationContext": true 
    }, 

    "runtimeOptions": { 
    "configProperties": { 
     "System.GC.Server": true 
    } 
    }, 

    "publishOptions": { 
    "include": [ 
     "wwwroot", 
     "Views", 
     "Areas/**/Views", 
     "appsettings.json", 
     "web.config" 
    ] 
    } 
} 
+1

可愛的你們大家如何冷靜下來,卻沒有留下評論。 – Baklap4

+1

Baklap4,不幸的是你是對的。如果一個帖子不符合我的喜好,我會冷靜下來,我總是留下評論,讓作者改進帖子,如果我看到顯着的改善,我總是會撤銷評論。不幸的是,我發現這裏有些人不夠優雅,不夠高雅。在我確信我的回答是正確的一個地方,它被降低了兩次。我曾四次提出這個問題,因爲他們總是在那裏審查那個評論。 –

回答

3

除了Lajos Arpad,我很好奇並且調查了一下。這似乎在Windows上安裝的依賴時,它保存在以下路徑下的NuGet包: packages\MySql.Data.EntityFrameworkCore\7.0.6-IR31

在Linux on另一方面,它安裝在該路徑上的包: packages\MySql.Data.EntityFrameworkCore\7.0.6-ir31

正如在本nuspec文件中聲明MySql.Data.EntityFrameworkCore版本定義爲7.0.6-IR31

當我用命令dotnet restore恢復軟件包時,我可以得出結論dotnet restore正在做一些有關恢復的奇怪事情。 將Linux上nuspec文件的版本更改爲7.0.6-ir31解決了我的問題。 由於這是一個錯誤(不尊重版本中的首都),我將填寫一份錯誤報告。

鏈接提交一個bug報告:https://github.com/dotnet/cli/issues/5155

+1

您的答案解決了我的問題,謝謝。由於linux區分大小寫,如果他的文件夾名爲ir31,它不會找到IR31。我打開了'project.lock.json',將'IR31'的所有實例都替換爲'ir31',現在'dotnet build'不再拋出錯誤。 –

+0

很高興看到它也適用於其他人;)! – Baklap4

+0

如果我可能:你似乎理解asp.net核心以及它如何與linux交互,所以我想知道你是否知道這個[我的基本問題]的答案(http://stackoverflow.com/q/41676966/ 831138)。 –

1

最近,我有另一種依賴類似的問題。經過長時間的折磨後,我意識到依賴需要通過安裝程序來安裝,或者如果您的情況不可行,那麼您可以複製。如果服務器上尚未安裝該軟件包,您可以在此處獲取軟件包和信息:https://www.nuget.org/packages/MySql.Data.EntityFrameworkCore/7.0.6-IR31

在此文件夾

c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\ 

你有.NET框架的幾個文件夾。你需要確保你需要的dll和xml文件在那裏。

0

我跑進正好與相同的包同樣的問題(我的Windows機器上正常工作本地,當詹金斯的dotnet運行在一個碼頭工人容器恢復和DOTNET構建失敗)。從Baklap4的回答繼,作爲dockerfile的部分添加以下行

​​

結合造成它

RUN dotnet restore --packages "packages" 

恢復所有包入容器的「包」的文件夾,所有項目知道在那個文件夾裏找他們。一旦我知道包裹在哪裏,我可以運行

RUN mv MySql.Data/7.0.6-ir31 MySql.Data/7.0.6-IR31 
RUN mv MySql.Data.EntityFrameworkCore/7.0.6-ir31 MySql.Data.EntityFrameworkCore/7.0.6-IR31 

將這些文件夾重命名爲大寫。