繁体   English   中英

MySQL-> .NET Core依赖关系错误(MySql.Data)

[英]MySQL -> .NET Core Dependency error (MySql.Data)

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

引发的错误: error NU1001: The dependency MySql.Data >= 7.0.6-IR31 could not be resolved. 这很奇怪,因为它适用于我们的本地计算机,而不适用于在docker中运行的CI。

运行dotnet restoredotnet 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"
    ]
  }
}

除了拉霍斯·阿尔帕德(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 restoredotnet restore方面做dotnet restore奇怪。 将Linux上nuspec文件中的版本更改为7.0.6-ir31解决了我的问题。 因为这是一个错误(不尊重版本中的大写字母),所以我将填写一个错误报告。

链接到错误报告: 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 restore和dotnet build时失败)。 从Baklap4的答案开始,作为dockerfile的一部分,我添加了以下行

RUN echo "{ \"packages\": \"packages\" }" >> global.json

与...结合

RUN dotnet restore --packages "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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM