.NET标准库输出不包含nuget依赖项

时间:2019-02-06 18:34:05

标签: c# .net visual-studio nuget

我有以下三个项目:

  1. ASP.NET Core MVC应用程序(针对.NET Framework 4.6.2)
  2. 包含我的EF核心模型,Migrations和DbContext类的类库(针对.NET Standard 2.0,以前是.NET Framework 4.6.2)。
  3. 用于使用EF Core迁移更新数据库的控制台应用程序(针对.NET Framework 4.6.2)。

参考1和3。2我只是将新的.NET Standard目标库替换为旧的.NET Framework类库。类库使用Microsoft.EntityFrameworkCore.Proxies NuGet包。

一切正常,我的单元测试全部运行,并且ASP.NET Core应用程序运行没有问题。我的问题是,用于更新数据库的控制台应用程序会生成,运行,但是在构造函数中此行上初始化DbContext时遇到运行时错误:

ChangeTracker.LazyLoadingEnabled = false;

说它无法加载程序集Microsoft.EntityFrameworkCore.Proxies。经过调查,我发现Microsoft.EntityFrameworkCore.Proxies.dll文件不在控制台应用程序或类库项目的生成输出中。类库项目的输出中唯一的.dll是项目.dll本身,旧的.NET Framework版本在输出中也包含所有NuGet包.dll,并且可以使用数据库更新工具很好地运行。

.NET标准库的输出中是否包括一些依赖项?

3 个答案:

答案 0 :(得分:2)

这是来自CEZARY PIĄTEK's blog

的另一个建议
 <Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>    
  </PropertyGroup>
</Project>

答案 1 :(得分:1)

您可能必须直接引用该库中的某些内容,以确保依赖项遍历器在其中看到类型。

实际上我们有时需要与Entity Framework SQL Server一起处理

private static readonly [proxylibnamespace].[somepublictype] _ProxyLibReference;

这样做,有时依赖遍历器会看到对类型的直接引用,然后将其包含在最终版本中。

答案 2 :(得分:0)

我最终不得不将.NET Framework 4.6.2添加到类库的目标框架列表中。

在.csproj中:

<PropertyGroup>
  <TargetFrameworks>netstandard2.0;net462</TargetFrameworks>
</PropertyGroup>

此后,它可与.NET Framework应用程序一起使用。