【问题标题】:MySQL -> .NET Core Dependency error (MySql.Data)MySQL -> .NET Core 依赖错误 (MySql.Data)
【发布时间】:2023-04-11 00:09:01
【问题描述】:

我们正在尝试通过 .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"
    ]
  }
}

【问题讨论】:

  • 你们所有人都投了反对票,但没有人发表评论。
  • Baklap4,很遗憾你是对的。如果某个帖子不符合我的喜好,以至于我对它投了反对票,我总是会留下评论,以允许作者改进帖子,如果我看到重大改进,我总是撤销反对票。不幸的是,我看到这里有些人不够优雅——不能这样做。在一个我确信我的答案是正确的地方,它被否决了两次。我已经问了四次原因,因为他们总是在那里审查评论。

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


【解决方案1】:

最近我在另一个依赖项上遇到了类似的问题。经过长时间的折磨后,我意识到需要通过安装程序安装依赖项,或者如果在您的情况下无法安装,那么您可以复制。如果服务器上尚未安装,您可以在此处获取软件包和信息: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 文件在那里。

【讨论】:

    【解决方案2】:

    除了 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 解决了我的问题。 由于这是一个错误(不考虑版本中的大写字母),我将填写错误报告。

    错误报告链接:https://github.com/dotnet/cli/issues/5155

    【讨论】:

    • 您的回答解决了我的问题,谢谢。由于 linux 区分大小写,如果文件夹名为 ir31,它不会找到 IR31。我打开project.lock.json,将IR31的所有实例替换为ir31,现在dotnet build不再抛出错误了。
    • 如果可以:您似乎了解 asp.net core 以及它如何与 linux 交互,所以不知道您是否知道seemingly basic question of mine 的答案。
    【解决方案3】:

    我在使用同一个包时遇到了完全相同的问题(在我的本地 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
    

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

    【讨论】:

      猜你喜欢
      • 2018-02-07
      • 2017-11-23
      • 2016-05-22
      • 1970-01-01
      • 2018-03-03
      • 2020-02-14
      • 2021-10-23
      • 1970-01-01
      • 2021-02-02
      相关资源
      最近更新 更多