首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET核心类库使用EFCore DbContext作为Nuget不查找EFCore

.NET核心类库使用EFCore DbContext作为Nuget不查找EFCore
EN

Stack Overflow用户
提问于 2021-03-19 13:15:24
回答 2查看 288关注 0票数 0

我正在尝试将数据访问服务构建为一个.NET核心3.1类库,然后使它成为可以在不同解决方案中重用的nuget包,而不必在每个解决方案中构建存储库类。

对类库代码进行测试并运行良好,但随后将nuget安装在另一个解决方案中,当调用数据服务中的方法时,会引发此错误:

System.IO.FileNotFoundException:“无法加载文件或程序集”Microsoft.EntityFrameworkCore、Version=5.0.4.0、Culture=neutral、PublicKeyToken=adb9793829ddae60“。系统找不到指定的文件。

显然,使用nuget或nuget本身的解决方案缺少对EntityFrameworkCore的依赖,但我不确定是哪一个,以及为什么。

当从我安装nuget的解决方案中查看解决方案资源管理器中的DataService.dll时,它不会显示该.dll的任何依赖项,它与其他已安装的nuget一样。我确保nuget还原是由deploy管道(使用Azure DevOps发布nuget)运行的,据我所见,它正在获取所有EFCore依赖项。

Azure DevOps在.nuspec中生成如下内容:

代码语言:javascript
复制
<?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不可能做到这一点,但我还没有找到任何证据来证实这一点。

EN

回答 2

Stack Overflow用户

发布于 2021-03-19 14:11:27

您应该能够创建自己的.nuspec,然后将其打包。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
  <metadata>
    <id>MyPackageId</id>
    <version>$version$</version>
    <title>My Package Title</title>
    <authors>My Company Name</authors>
    <owners>My Company Name</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>A description of our package</description>
    <copyright>Copyright 2021</copyright>
    <dependencies>
      <group targetFramework=".NETStandard2.0"> <!-- Libraries *should* target .NET Standard in most cases -->
        <dependency id="SomeOtherNugetPackageInSameSolutionThatShouldHaveSameVersion" version="$version$" />
        <dependency id="Microsoft.Azure.ServiceBus" version="4.1.1" /> <!-- Specify your external dependencies and their required version here -->
      </group>
    </dependencies>
  </metadata>
  <files>
    <file src="bin\$configuration$\netstandard2.0\MyLibrary.dll" target="lib\netstandard2.0" />
  </files>
</package>

当您在Azure DevOps中构建包时,您应该能够选中一个复选框,让它用版本替换$version$。否则你可以硬编码它。取决于您的团队如何进行版本控制。

重要的部分是<dependencies>部分。

票数 1
EN

Stack Overflow用户

发布于 2021-03-19 15:17:33

通常在使用像Jenkins或Azure DevOps这样的devops产品时,当构建服务器和/或构建代理没有完全更新或更新但没有完全更新时,您可能会遇到这样的问题。

看来您的管道需要重新配置。

当这种情况发生时,请看一下数字--特别是版本号。当他们看上去不对劲的时候,这是一个不对劲的迹象。在您的示例中,您说您正在进行.NET Core3.1构建,但是正在寻找EF5.0.4.0。虽然版本不一定要匹配,但从务实的角度来看,它们往往是匹配的。

关于

,在我的软件开发生涯中,这种情况已经发生过很多次了。最近,这发生在我们开始支持.NET Core3.1而不是.NET Core2.2时。当构建在您的机器上工作,而不是在构建服务器上工作时,它很快就会变得很明显!

本质上,管道的每个部分都需要正确地处理这些方面:从源代码管理中提取、从配置存储库(例如NuGet)中提取、在上下文中构建和发布。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66708899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档