我正在尝试将数据访问服务构建为一个.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中生成如下内容:
<?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不可能做到这一点,但我还没有找到任何证据来证实这一点。
发布于 2021-03-19 14:11:27
您应该能够创建自己的.nuspec,然后将其打包。
<?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>部分。
发布于 2021-03-19 15:17:33
通常在使用像Jenkins或Azure DevOps这样的devops产品时,当构建服务器和/或构建代理没有完全更新或更新但没有完全更新时,您可能会遇到这样的问题。
看来您的管道需要重新配置。
当这种情况发生时,请看一下数字--特别是版本号。当他们看上去不对劲的时候,这是一个不对劲的迹象。在您的示例中,您说您正在进行.NET Core3.1构建,但是正在寻找EF5.0.4.0。虽然版本不一定要匹配,但从务实的角度来看,它们往往是匹配的。
关于
,在我的软件开发生涯中,这种情况已经发生过很多次了。最近,这发生在我们开始支持.NET Core3.1而不是.NET Core2.2时。当构建在您的机器上工作,而不是在构建服务器上工作时,它很快就会变得很明显!
本质上,管道的每个部分都需要正确地处理这些方面:从源代码管理中提取、从配置存储库(例如NuGet)中提取、在上下文中构建和发布。
https://stackoverflow.com/questions/66708899
复制相似问题