如何在.NET Core RC2控制台应用程序(Linux,Debian 8)中使用System.Data?

kos*_*tix 7 c# linux .net-core .net-core-rc2

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

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

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

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0-rc2-3002702"
    }
  },
  "frameworks": {
    "netcoreapp1.0": {
      "imports": "dnxcore50"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

使用这个类似查询的答案,我能够添加一个System.Data.Common更改的引用

"frameworks": {
  "netcoreapp1.0": {
    "imports": "dnxcore50"
  }
}
Run Code Online (Sandbox Code Playgroud)

片段到

"frameworks": {
  "netcoreapp1.0": {
    "imports": "dnxcore50",
    "dependencies": {
      "System.Data.Common": "*"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

dotnet restore使用NuGet下载了一堆东西.

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

"frameworks": {
  "netcoreapp1.0": {
    "imports": "dnxcore50",
    "dependencies": {
      "System.Data.SqlClient": "*"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但NuGet说的是

无法为'.NETCoreApp,Version = v1.0'解析'System.Data.SqlClient'.

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

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

令我困惑的是,专用于.NET Core的NuGet包图库明确列出System.Data.SqlClient了可用的.

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

另外,我目前正在一个只有dotnetCLI工具的普通控制台中玩游戏.有没有办法管理.NET Core项目的项目依赖项而无需安装IDE?

Tho*_*mas 10

就像在评论中已经注释的戳是正确的.指定一个版本以System.Data.SqlClient使您的恢复更快乐;)

这是为什么?System.Data.SqlClient存在于http://nuget.org库中.不指定版本("")不允许在项目边界之外(如nuget feed包)并且仅指定一个星形"*"(您不应该这样做,它允许重置更改)恢复最高可用版本.由于没有稳定,明星将找不到任何东西(背后的破折号有一些魔力).该库的RC2版本是上面提到的4.1.0-rc2-24027,当您询问4.1.0-rc2-*时,它将占用RC2构建中的最高版本(但只有一个).相比之下,System.Data.Common在nuget.org上发布了针对通用Windows平台的公开发布,因此可以找到它.

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

  • 此答案的快速补充:默认Feed不是myget,而是"普通"nuget Feed.星型("*"`)版本依赖项将始终获得最新的*stable*版本的软件包.所以对于`System.Data.Common`,你得到[`4.0.0`](https://www.nuget.org/packages/System.Data.Common/); 但是没有稳定的`System.Data.SqlClient`,所以失败了.在执行`dotnet restore`之后,您可以通过查看`project.lock.json`来确认实际使用的版本. (2认同)
  • @kostix是的,您可以让不同的项目需要不同版本的依赖项,而`dotnet restore`将确保每个项目都有正确的版本.这些包本地缓存在`%HOME%\.nuget\packages`中,或者根据需要获取..NET Core的全部之处在于,您只需要依赖于您需要的东西,而不是始终使用完整的.NET Framework,而.NET Framework只有少数版本(以及影响其上运行的所有应用程序的升级). (2认同)