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

时间:2016-12-23 15:02:07

标签: c# mysql docker asp.net-core

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

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

在本地运行dotnet restoredotnet rundotnet 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"
    ]
  }
}

3 个答案:

答案 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

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