未找到应用程序依赖项清单 (...) 中指定的程序集

Posted

技术标签:

【中文标题】未找到应用程序依赖项清单 (...) 中指定的程序集【英文标题】:An assembly specified in the application dependencies manifest (...) was not found 【发布时间】:2018-07-31 11:24:27 【问题描述】:

我将 Microsoft.AspNetCore 从 2.0.3 升级到 2.0.5,我的 WebAPI 项目虽然在本地成功运行,但无法在生产 (IIS) 中启动。在此次升级之前,生产中的一切都很好。日志目录产生的错误信息如下:

Error:
  An assembly specified in the application dependencies manifest (MyProject.WebAPI.deps.json) was not found:
    package: 'Microsoft.AspNetCore.Mvc.Abstractions', version: '2.0.2'
    path: 'lib/netstandard2.0/Microsoft.AspNetCore.Mvc.Abstractions.dll'

  This assembly was expected to be in the local runtime store as the application was published using the following target manifest files:
    aspnetcore-store-2.0.5.xml

有人可以向我解释一下这到底是什么意思吗?我认为这是某种版本不匹配,但为什么会发生这种情况?我认为 NuGet 包的最新稳定版本不应该有这样的问题。

我能够通过将 Microsoft.AspNetCore.All 从 2.0.5 降级到 2.0.3 来解决此问题,但希望找到更好的解决方案,以便我可以使用最新版本的这个包。

【问题讨论】:

【参考方案1】:

开发机器通常安装了 SDK,但在生产环境中只有运行时。

将以下内容添加到您的 .csproj 文件并再次发布。

<PropertyGroup>               
    <PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
</PropertyGroup>

【讨论】:

添加该属性到底有什么作用?它是否使 SDK 安装在目标机器上?它如何让我的包使用最新版本或你有什么? 如果没有安装SDK,它将导出运行所需的DLL。您会注意到您发布的文件夹大小增加了,其中包含更多文件。 相关:github.com/dotnet/cli/issues/6516#issuecomment-299313448 一个有趣的替代方案benday.com/2018/02/23/… 我在本地机器上得到了这个,但添加这个修复了它。谢谢。【参考方案2】:

有时这与启动项目有关,例如,如果迁移是 Azure Functions 项目中的类库。您必须确保在将 EF 库项目选为启动项目时运行 Add-Migration。

【讨论】:

这对我来说是个问题,将启动项目设置为我尝试运行命令的项目解决了它。【参考方案3】:

对我来说,标记的答案并没有解决问题。我的问题是尝试添加迁移时

Add-Migration -Name initial-migration -Context Mysln.Data.MyDbContext -StartupProject Mysln -Project Mysln.Core

错误是这样的:

我通过将所有 Entityframework 包降级到 2.0.0 而不是最新的 2.2.0 预览版解决了这个问题。

【讨论】:

您遇到的错误是什么?和有问题的一样吗? 如图所示,和问题一样 @nsarchar 抱歉,我无法理解您的评论和观点? 我遇到了与 Marzouk 相同的错误,但是通过在运行 add-migration(或 dotnet ef migrations add 在我的情况下)时将项目声明为选项之一来解决此问题 @Marzouk 我正在尝试使用最新的依赖项,我关注了这篇文章,它工作了dev.to/azure/using-entity-framework-with-azure-functions-50aa。引用原帖“当你构建 Azure Functions 项目时,Microsoft.NET.Sdk.Functions 确实如此构建工件的一些组织以创建有效的功能项目结构。它移动到子文件夹的 .dll 之一是项目 .dll。不幸的是,对于实体框架迁移等设计时工具,它需要 .dll位于构建目标的根目录"【参考方案4】:

为解决前半部分错误消息,An assembly specified in the application dependencies manifest (…) was not found 在部署到目标服务器时务必始终使用发布输出。

对于一个独立的应用程序,它可以在

中找到
bin\Release\netcoreapp2.0\win81-x64\publish

或用于框架相关的部署

bin\Release\netcoreapp2.0\publish

以上目录中的输出仅用于开发,因为它们特定于构建的机器和用户配置。

取自related answer.

【讨论】:

没有解决我的问题,但向前迈出了一步;)。【参考方案5】:

如果你像我一样在你的解决方案中有多个项目:

如果你想在你的“非启动”项目中搭建 dbcontext(在我的例子中是 InstantOrder.Functions.Data) 那么你应该像这样添加Scaffold-DbContext命令的-StartupProject参数 -

Scaffold-DbContext "Server=..." -Project InstantOrder.Functions.Data -StartupProject InstantOrder.Functions.Data 

【讨论】:

使用 dotnet CLI 时,使用这个 --startup-project 【参考方案6】:

2 美分:如果您只是从构建文件夹中获取,则不提供依赖项的 dll。如果您发布该文件夹,它们就是。这就是我的解决方案。

【讨论】:

【参考方案7】:

我遇到了这个错误,但是我的解决方案与上面发布的有所不同。我的问题是我通过 zip 文件进行部署,并且在构建 zip 文件时我没有包含子目录,因此没有包含所需的文件。

因此,如果您通过 zip 文件发布,请确保在构建 zip 时包含所有子文件夹。

【讨论】:

【参考方案8】:

我在库项目上运行 Scaffold-DbContext 命令时遇到此错误。

解决方案:

    从解决方案中删除 Azure Function 项目,然后运行此命令。 之后,使用添加现有项目功能在解决方案中再次添加 Azure Function 项目。

【讨论】:

【参考方案9】:

我的 PC 上未安装正确的 .NET Core 运行时。我有 NETCore.App 2.1 和 2.2,但项目的目标是 2.0。

dotnet --list-runtimes

我从dot.net 站点安装了正确的运行时,它解决了问题。

【讨论】:

【参考方案10】:

在大多数情况下,您会收到该错误,因为版本不对齐。

我更改了Microsoft.VisualStudio.Web.CodeGeneration.Design 版本,它成功了。

之前

<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.0" />

之后

<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.4" />

【讨论】:

【参考方案11】:

我在重命名项目后将 Lambda 发布到 AWS 时发生了这种情况。我删除了 obj 和 bin 文件夹,重新构建、重新发布并修复了它。

【讨论】:

以上是关于未找到应用程序依赖项清单 (...) 中指定的程序集的主要内容,如果未能解决你的问题,请参考以下文章

Android 应用程序不会构建——在依赖项的 androidx.work:work-runtime:2.7.0-beta01 中指定的 minCompileSdk (31)

已发布的 .Net-Core 应用程序无法运行

Intellij IDEA 无法识别 Maven 依赖项中指定的类

Intellij IDEA 无法识别 Maven 依赖项中指定的类

如何解决本机 Java 或 Kotlin 中的错误“在依赖项的 AAR 元数据中指定的 minCompileSdk (31)”? [复制]

脚手架身份时的VS错误消息