我们正试图通过.NET Core连接到MySQL数据库。 一切都在本地工作,但在我们运行gitlab-ci的服务器上,它无法构建。因此失败了。
抛出的错误:error NU1001: The dependency MySql.Data >= 7.0.6-IR31 could not be resolved.
这很奇怪,因为它适用于我们的本地计算机,但不适用于在docker中运行的CI。
在本地运行dotnet restore
和dotnet run
。 dotnet restore
也适用于服务器,您可以看到已安装MySql.Data包。然而,当运行单元测试时,它会因为依赖无法解决而中断。也许不兼容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"
]
}
}
答案 0 :(得分:3)
除了Lajos Arpad之外,我很好奇并且稍微调查了一下。似乎在Windows上安装依赖项时,它会在以下路径下保存nuget包:
packages\MySql.Data.EntityFrameworkCore\7.0.6-IR31
另一方面,在Linux上,它会在此路径上安装软件包:
packages\MySql.Data.EntityFrameworkCore\7.0.6-ir31
正如MySql.Data.EntityFrameworkCore
的nuspec文件中声明的那样,版本被定义为7.0.6-IR31
当我使用命令dotnet restore
恢复软件包时,我可以得出结论dotnet restore
正在做一些关于恢复的奇怪的事情。
将Linux上nuspec文件中的版本更改为7.0.6-ir31
解决了我的问题。
由于这是一个错误(不尊重版本中的首都),我将填写错误报告。
链接到bugreport:https://github.com/dotnet/cli/issues/5155
答案 1 :(得分: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文件存在。
答案 2 :(得分:0)
我在同一个软件包中遇到了完全相同的问题(在我的Windows机器上本地工作正常,当Jenkins在docker容器中运行dotnet restore和dotnet build时失败)。继Baklap4的回答之后,作为dockerfile的一部分,我添加了以下行
RUN echo "{ \"packages\": \"packages\" }" >> global.json
与
结合使用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
将这些文件夹重命名为大写。