【问题标题】:Why isn't System.Data.SqlClient published by dotnet publish?为什么 dotnet publish 不发布 System.Data.SqlClient?
【发布时间】:2017-08-16 23:22:13
【问题描述】:

我有一个类似这样的 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

但我在文件夹\bin\Debug\netcoreapp1.0\publish\System.Data.SqlClient.dll 中看不到System.Data.SqlClient.dll

这是为什么呢?

【问题讨论】:

  • 如果我使用Version="4.4.0" 而不是Version="4.1.0",它确实会显示在那里
  • WAG,但请检查您的 GAC 以查看您是否安装了 4.1.0。
  • 我在 C:\Windows\assembly 中没有看到该 dll 的任何版本。 (这就是我在 GAC 中查看的地方,对吗?)但我确实在 %userprofile%\.nuget\packages\system.data.sqlclient 中看到了不同的版本@
  • Welp,如果你搜索了整个 GAC 并没有找到它,那么我的 AG 有点太 W了。祝你好运。
  • @Will .NET Core 应用程序不使用 GAC。

标签: .net-core


【解决方案1】:

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

您发布了一个“便携式”应用程序,该应用程序可以在 windows、linux、macOS 等平台上运行,并且将加载相应的库,例如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 子文件夹内应该有变体。

【讨论】:

  • 谢谢 Marin,我现在明白了
  • 马丁解释得很好,谢谢!我今天为此苦苦挣扎。我很困惑为什么我的部署包这么大,原来是因为运行时文件夹。我在进行 dotnet 发布时尝试设置 --runtime win-x64 参数,期望它不包含其他运行时的库,但它最终创建了一个超过 90MB 的发布目录!经过研究,看起来提供运行时会将其变成 SCD - 因此已发布应用程序的大小。有没有办法指定运行时,使其不是 SCD,并且不包括所有运行时?
  • @Tophat,要发布一个不是 SCD 且不包含所有运行时的 dotnet 核心,请参阅我在这篇文章中使用的参数:stackoverflow.com/questions/56959856/net-core-3-0-nuget-dlls/…
猜你喜欢
  • 2019-09-18
  • 1970-01-01
  • 2021-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-17
  • 2021-09-20
  • 1970-01-01
相关资源
最近更新 更多