MySQL – > .NET核心依赖错误(MySql.Data)

我们正尝试通过.NET Core连接到MySQL数据库。 一切工作本地,但在我们的服务器上运行gitlab-ci它build设失败。 因此,失败的构build。

抛出的错误: 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" ] } } 

除了Lajos Arpad之外,我还好奇和调查了一下。 看来在Windows上安装依赖关系时,它将nuget包保存在以下path下: packages\MySql.Data.EntityFrameworkCore\7.0.6-IR31

另一方面,在Linux上,它将软件包安装在这个path上: packages\MySql.Data.EntityFrameworkCore\7.0.6-ir31

MySql.Data.EntityFrameworkCore的nuspec文件中声明的版本被定义为7.0.6-IR31

当我用命令dotnet restoredotnet restore可以结束dotnet restore正在做一些奇怪的狗屎关于恢复。 将Linux上nuspec文件的版本更改为7.0.6-ir31解决了我的问题。 由于这是一个错误(不尊重版本中的首都),我要填写一个错误报告。

链接到bugreport: https : //github.com/dotnet/cli/issues/5155

最近我有一个类似的问题,与另一个依赖。 经过长时间的折磨后,我意识到依赖需要通过安装程序来安装,或者如果您的情况不可行,那么您可以复制。 在这里你可以得到包和信息,如果这还没有安装在服务器上: https : //www.nuget.org/packages/MySql.Data.EntityFrameworkCore/7.0.6-IR31 。

在这个文件夹

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

.NET Frameworks有几个文件夹。 你需要确保你需要的dll和xml文件在那里。

我遇到了同样的问题(在我的Windows机器在本地工作正常,当Jenkins在docker容器中运行dotnet恢复和dotnet构build时失败)的问题。 继Baklap4的回答,作为docker文件的一部分,我添加了以下行

 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 

将这些文件夹重命名为大写。