为什么不通过dotnet发布System.Data.SqlClient?

时间:2017-08-16 15:01:30

标签: .net-core

我有一个像这样的something.csproj项目:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="System.Data.SqlClient" Version="4.1.0" />
  </ItemGroup>

</Project>

和这样的something.cs程序:

using System;
using System.IO;
using System.Data.SqlClient;

namespace SomethingNS
{
    public class Something
    {
       public static void Main()
       {
           var a = new SqlCommand();
       }
    }
}

使用dotnet 2.0,我执行:

dotnet publish

但是我没有在文件夹System.Data.SqlClient.dll看到\bin\Debug\netcoreapp1.0\publish\System.Data.SqlClient.dll

为什么?

1 个答案:

答案 0 :(得分:5)

原因是System.Data.SqlClient的.NET Core实现在windows和unix上有所不同,因此利用.NET Core加载所需的特定库的能力。

您发布了一个“便携式”应用程序,它可以在Windows,Linux,macOS等上运行,并且将从例如Windows上加载相应的库。 runtimes/unix/lib/netstandard1.3/System.Data.SqlClient.dllruntimes/win/lib/netstandard1.3/System.Data.SqlClient.dll。还有一些其他特定于平台的资产(unix的托管System.IO.Pipes.dll和32和64位窗口的两个本地sni.dll文件。

这是您的发布输出的根级别中没有System.Data.SqlClient.dll的原因。 bin\Debug\netcoreapp1.0\publish\runtimes子文件夹中应该有变体。