.net core 为什么不是';t System.Data.SqlClient是否由dotnet publish发布?
我有一个类似这样的something.csproj项目:.net core 为什么不是';t System.Data.SqlClient是否由dotnet publish发布?,.net-core,.net Core,我有一个类似这样的something.csproj项目: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp1.0</TargetFramework> </PropertyGroup> <ItemGroup>
<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>
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
为什么呢 原因是
System.Data.SqlClient
的.NET核心实现在windows和unix上不同,因此利用了.NET核心加载所需特定库的能力
您发布了一个“可移植”应用程序,该应用程序能够在windows、linux、macOS等平台上运行,相应的库将从runtimes/unix/lib/netstandard1.3/System.Data.SqlClient.dll
或runtimes/win/lib/netstandard1.3/System.Data.SqlClient.dll
加载。还有一些其他特定于平台的资产(用于unix的托管System.IO.Pipes.dll
,以及用于32位和64位windows的两个本机sni.dll
文件)
这就是发布输出的根级别中没有
System.Data.SqlClient.dll
的原因。bin\Debug\netcoreapp1.0\publish\runtimes
子文件夹中应该有变体。原因是System.Data.SqlClient
的.NET核心实现在windows和unix上不同,因此利用.NET核心的能力来加载所需的特定库
您发布了一个“可移植”应用程序,该应用程序能够在windows、linux、macOS等平台上运行,相应的库将从runtimes/unix/lib/netstandard1.3/System.Data.SqlClient.dll
或runtimes/win/lib/netstandard1.3/System.Data.SqlClient.dll
加载。还有一些其他特定于平台的资产(用于unix的托管System.IO.Pipes.dll
,以及用于32位和64位windows的两个本机sni.dll
文件)
这就是发布输出的根级别中没有
System.Data.SqlClient.dll
的原因。bin\Debug\netcoreapp1.0\publish\runtimes
子文件夹中应该有变体。如果我使用Version=“4.4.0”
而不是Version=“4.1.0”
,它确实会显示在那里,但请检查GAC以查看是否安装了4.1.0。我在C:\Windows\assembly
中没有看到该dll的任何版本。(这就是我在GAC中查看的地方,对吗?)但是我确实在%userprofile%\.nuget\packages\system.data.sqlclient
Welp中看到了不同的版本,如果您搜索了整个GAC,但没有找到它的安装,那么我的AG有点太W了。祝您好运。@NET核心应用程序会不会使用GAC。如果我使用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核心应用程序不使用GAC。谢谢Marin,我现在理解得很好,Martin解释道,谢谢我今天很挣扎。我很困惑为什么我的部署包这么大,结果是因为runtimes文件夹。在进行dotnet发布时,我尝试设置--runtime win-x64参数,希望它不包括其他运行时的libs,但最终创建了一个超过90MB的发布目录!经过研究,提供运行时似乎会将其转化为SCD,从而形成已发布应用程序的大小。有没有办法指定运行时,使其不是SCD,并且不包含所有的运行时?@Tophat,要发布一个不是SCD且不包含所有运行时的dotnet核心,请查看我在本文中使用的参数:谢谢Marin,我现在明白了Martin,谢谢!我今天很挣扎。我很困惑为什么我的部署包这么大,结果是因为runtimes文件夹。在进行dotnet发布时,我尝试设置--runtime win-x64参数,希望它不包括其他运行时的libs,但最终创建了一个超过90MB的发布目录!经过研究,提供运行时似乎会将其转化为SCD,从而形成已发布应用程序的大小。有没有办法指定运行时,使其不是SCD,并且不包含所有运行时?@Tophat,要发布不是SCD且不包含所有运行时的dotnet core,请参阅我在本文中使用的参数: