C# 可以使用;System.Data.SqlClient“;在.net标准2.0库中安装包,而不必将包添加到使用程序集?

C# 可以使用;System.Data.SqlClient“;在.net标准2.0库中安装包,而不必将包添加到使用程序集?,c#,.net-core,nuget,.net-standard,C#,.net Core,Nuget,.net Standard,考虑使用“System.Data.SqlClient”包创建一个名为“SqlLib”的类库,如下所示: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> </PropertyGroup> <ItemGroup> <Pac

考虑使用“System.Data.SqlClient”包创建一个名为“SqlLib”的类库,如下所示:

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

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

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

</Project>
现在,我从.net Core 3.1控制台应用程序中引用这一点:

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

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Reference Include="SqlLib">
      <HintPath>..\SqlLib\bin\Debug\netstandard2.0\SqlLib.dll</HintPath>
    </Reference>
  </ItemGroup>

</Project>
到目前为止,一切都很简单。现在,当我运行console应用程序时,我得到:

未处理的异常。System.IO.FileNotFoundException:无法加载 文件或程序集'System.Data.SqlClient,版本=4.6.1.2, 区域性=中性,PublicKeyToken=b03f5f7f11d50a3a'。系统不能 查找指定的文件。文件名:“System.Data.SqlClient, 版本=4.6.1.2,区域性=中性,PublicKeyToken=b03f5f7f11d50a3a'
在SqlLib.Test.AccessSql()中

我必须通过显式地将包添加到控制台应用程序来解决这个问题。就我所知,我不应该这么做。(从目标为“net48”的对象中使用类库时也会出现同样的问题。)

我做错了什么


我确实发现了这一点:


因此,它看起来应该适用于包依赖项,但在本例中,类库具有包依赖项,但可执行文件取决于程序集,而不是包。

为什么您认为不需要显式添加?Core是NetLibrary的紧凑版本,适用于内存比标准机器少的移动应用程序。因此,core中的库是Microsoft认为大多数人使用的最小库。@jdweng,因为我希望叶程序集自动包含所有非叶程序集引用的包集。例如,如果我有像A->B->C这样的依赖项,并且我将一个包添加到C中,我希望它在编译A时自动包含该包。必须手动执行此操作肯定是一个维护问题。。。(在.Net Framework中,如果添加对程序集的引用,则该程序集将自动包含在任何间接引用它的程序集中。)我感觉这可能与此相关,我将调查:。而不是依赖于特定的程序集,而是依赖于项目。基本上,如果您可以使用项目或包依赖项(而不是程序集依赖项),life会运行得更好。@MatthewWatson:从根本上说,它是一个不同的构建系统,具有一些不同的行为。尽管这将是一个更大的初始更改,但我还是会接受它,而不是试图让.NETCore表现得像.NETFramework一样。
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Reference Include="SqlLib">
      <HintPath>..\SqlLib\bin\Debug\netstandard2.0\SqlLib.dll</HintPath>
    </Reference>
  </ItemGroup>

</Project>
using System;
using SqlLib;

namespace ConsoleApp
{
    class Program
    {
        public static void Main()
        {
            var t = new Test();
            Console.WriteLine(t.AccessSql());
            Console.ReadLine();
        }
    }
}