C# 可以使用;System.Data.SqlClient“;在.net标准2.0库中安装包,而不必将包添加到使用程序集?
考虑使用“System.Data.SqlClient”包创建一个名为“SqlLib”的类库,如下所示: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
<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();
}
}
}