【问题标题】:How do I use System.Data in a .NET Core RC2 console app (Linux, Debian 8)?如何在 .NET Core RC2 控制台应用程序(Linux、Debian 8)中使用 System.Data?
【发布时间】:2016-05-17 18:07:52
【问题描述】:

我在 Debian 8 amd64 系统上安装了 .NET Core RC2,并想测试是否可以查询 Microsoft SQL Server 的实例。

所以我想在我的项目中添加对 System.Data.SqlClient 程序集的依赖项。

目前我通过运行dotnet new CLI 工具创建的项目文件如下所示:

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0-rc2-3002702"
    }
  },
  "frameworks": {
    "netcoreapp1.0": {
      "imports": "dnxcore50"
    }
  }
}

this answer 用于类似的查询,我能够添加对System.Data.Common 的引用来更改

"frameworks": {
  "netcoreapp1.0": {
    "imports": "dnxcore50"
  }
}

片段到

"frameworks": {
  "netcoreapp1.0": {
    "imports": "dnxcore50",
    "dependencies": {
      "System.Data.Common": "*"
    }
  }
}

这使得dotnet restore 使用 NuGet 下载了一堆东西。

然后我尝试将该片段更改为读取

"frameworks": {
  "netcoreapp1.0": {
    "imports": "dnxcore50",
    "dependencies": {
      "System.Data.SqlClient": "*"
    }
  }
}

但 NuGet 说是

无法为“.NETCoreApp,Version=v1.0”解析“System.Data.SqlClient”。

如果我将版本字符串更改为“4.1.0-rc3-*”,则错误消息会变得更加具体:

无法为“.NETCoreApp,Version=v1.0”解析“System.Data.SqlClient (>= 4.1.0-rc3)”。

我感到困惑的是,the NuGet package gallery dedicated to .NET Core 明确将System.Data.SqlClient 列为可用。

那么我该怎么做才能将System.Data.SqlClient 程序集的引用添加到我的项目并让NuGet 下载它?

顺便说一句,我目前只使用dotnet CLI 工具在一个普通的控制台中玩耍。有什么方法可以在不安装 IDE 的情况下管理 .NET Core 项目的项目依赖关系?

【问题讨论】:

  • 不完全确定那里发生了什么,但请尝试版本 "4.1.0-*"。出于某种原因,这将(截至目前)得到4.1.0-rc2-24027,它有效。
  • @poke,成功了,谢谢!
  • 对于那些发现这篇文章的人:我未能让System.Data.SqlClient 登录到 Microsoft SQL Server 2005 的实例并提交了an issue 关于这个问题。

标签: c# linux .net-core .net-core-rc2


【解决方案1】:

就像评论中已经注释的戳是正确的。为System.Data.SqlClient 指定一个版本让您的恢复愉快;)

这是为什么呢? System.Data.SqlClient 存在于 http://nuget.org 库中。不允许在项目边界之外(如 nuget 提要包)不指定版本(“”)并仅指定星号 "*"(你不应该这样做,它允许破坏性更改)恢复最高可用版本.由于没有马厩,star 将找不到任何东西(后面的破折号有一些魔法)。该库的 RC2 版本是上面提到的 4.1.0-rc2-24027,当您使用 4.1.0-rc2-* 询问时,它将采用最高的 RC2 版本(但只有一个)。相比之下,System.Data.Common 在 nuget.org 上有一个针对通用 Windows 平台的公开版本,因此被发现。

RC3 是下一个版本,仅适用于 .NET Core 和 ASP.NET Core 团队的开发人员源,而不是公共 nuget 源。你不应该和他们一起玩。

【讨论】:

  • 谢谢(和@poke):很高兴知道建议的解决方案不是魔术而是预期的行为。
  • 对此答案的快速补充:默认提要不是 myget,而是“正常”的 nuget 提要。星号 ("*") 版本依赖项将始终获得最新的 stable 版本的包。所以对于System.Data.Common,你得到4.0.0;但是没有稳定的System.Data.SqlClient,所以失败了。执行dotnet restore后查看project.lock.json可以确认实际使用的是哪个版本。
  • 我是否理解正确,如果我有另一个项目与当前项目并排,这将需要另一个版本的System.Data.SqlClient,NuGet 也将能够获取另一个版本,将它们保存在任何位置,并且项目构建工具将能够为每个项目选择列出的特定版本? (不熟悉 NuGet,抱歉)。
  • v3 中的 NuGet 对兄弟姐妹等有一些规则。请参阅 docs.nuget.org/consume/ProjectJson-Dependency
  • @kostix 是的,您可以让不同的项目需要不同版本的依赖项,dotnet restore 将确保每个项目都有正确的版本。这些包在本地缓存在%HOME%\.nuget\packages 中,或者根据需要获取。 .NET Core 的全部优点在于您只依赖于您需要的东西,而不是始终提供完整的 .NET Framework,后者仅提供几个版本(并且升级会影响在其上运行的所有应用程序)。
【解决方案2】:

如果您在 project.json 文件中,如果您已使用可用的最新工具更新了 Visual Studio,则智能感知现在会为您提供指导。

我在依赖项元素中添加了以下内容,它运行良好..

“System.Data.SqlClient”:“4.1.0-rc2-24027”,

【讨论】:

    【解决方案3】:

    在我的 MINT 19 Tara 上,我不使用 System.Data.SqlClient,而是使用较新版本的 Microsoft.Data.SqlClient。 Check nuget

    键入 .NET-cli 命令后,下载包并将引用添加到项目 csproj 文件中。

    在代码中,使用较新的命名空间:

    使用 Microsoft.Data.SqlClient;

    “常规”代码工作正常:

     public static void CreateCommand(string queryString, string connectionString)
        {
            using (SqlConnection connection = new SqlConnection(
                       connectionString))
            {
                SqlCommand command = new SqlCommand(queryString, connection);
                command.Connection.Open();
                SqlDataReader reader = command.ExecuteReader() ;
                while( reader.Read() ) {
                    for (int i = 0; i < reader.FieldCount; i++)
                    {
                       Console.WriteLine( "Column name={0}, Value={1}", 
                            reader.GetName(i),
                            reader.GetValue(i) ); 
                    }
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2019-12-29
      • 1970-01-01
      • 2019-05-18
      • 2020-02-08
      • 2023-03-20
      • 2017-10-15
      • 1970-01-01
      • 2020-01-28
      • 1970-01-01
      相关资源
      最近更新 更多