【发布时间】:2021-03-19 13:15:24
【问题描述】:
我正在尝试将数据访问服务构建为 .NET Core 3.1 类库,然后将其制成一个 nuget 包,可以在不同的解决方案中重复使用,而无需在每个解决方案中搭建数据库和构建存储库类。
类库代码经过测试可以正常工作,但是在另一个解决方案中安装了nuget,调用数据服务中的方法时会抛出此错误:
System.IO.FileNotFoundException: '无法加载文件或程序集 'Microsoft.EntityFrameworkCore,版本=5.0.4.0,文化=中性, PublicKeyToken=adb9793829ddae60'。系统找不到文件 指定
显然,使用 nuget 的解决方案或 nuget 本身缺少对 EntityFrameworkCore 的依赖,但我不确定是哪个以及为什么。
当从我安装了 nuget 的解决方案中查看解决方案资源管理器中的 DataService.dll 时,它没有显示该 .dll 的任何依赖关系,它与其他已安装的 nuget 一样。 我已确保 nuget restore 由部署管道运行(使用 Azure DevOps 释放 nuget),据我所知,它正在获取所有 EFCore 依赖项。
Azure DevOps 在 .nuspec 中生成它:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>SoRDataAccess</id>
<version>1.1.4</version>
<authors>VssAdministrator</authors>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Description</description>
<dependencies />
</metadata>
</package>
有没有人成功地做到这一点或知道这应该是可能的。我开始担心这可能与 EFcore 无关,但我还没有找到任何可以确认的信息。
【问题讨论】:
-
创建 Nuget 包时,是否指定了对该库的依赖项?分享您的 .nuspec。
-
@mason nuspec 是由 DevOps 生成的,几乎是空的。在工作 nugets 中看起来是一样的。 EFCore 的依赖项在 .csproj 中指定
-
即使 nuspec 是由 DevOps 生成的(你的意思是 Azure DevOps?),它是否包含依赖关系?在我们所有的内部 NuGet 包中,我们明确地调用了我们的包所依赖的任何外部依赖项。然后,当有人使用该包时,它可以看到该依赖项并强制执行约束。这取决于您构建构建的准确程度 - 但如果我们在源代码中提供 .nuspec,我们将跳过自动生成 .nuspec。这使我们能够明确控制我们的包最终依赖的依赖项。再次:分享您的 nuspec!
-
@mason 已编辑以包含 nuspec。
-
看起来像是 .NET 5.0 与 .NET Core 3.1 的版本控制问题。也许您的管道没有完全更新,或者以某种方式试图同时支持两者,但不正确。
标签: c# .net entity-framework nuget