我有一个像这样的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
?
为什么?
答案 0 :(得分:5)
原因是System.Data.SqlClient
的.NET Core实现在windows和unix上有所不同,因此利用.NET Core加载所需的特定库的能力。
您发布了一个“便携式”应用程序,它可以在Windows,Linux,macOS等上运行,并且将从例如Windows上加载相应的库。 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位窗口的两个本地sni.dll
文件。
这是您的发布输出的根级别中没有System.Data.SqlClient.dll
的原因。 bin\Debug\netcoreapp1.0\publish\runtimes
子文件夹中应该有变体。