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

80

我将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 来解决了这个问题,但希望找到一个更好的解决方案,以便我可以使用此软件包的最新版本。

13个回答

110

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

请将以下内容添加到您的.csproj文件中,然后再次发布。

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

4
加入那个属性具体有什么作用?它会使得 SDK 安装到目标机器上吗?它如何让我的软件包使用最新版本或其他更新内容呢? - KSwift87
13
如果SDK未安装,它将导出运行所需的DLL。您会注意到发布文件夹的大小已经增加,并且其中有更多的文件。 - Steve Tolba
1
相关链接:https://github.com/dotnet/cli/issues/6516#issuecomment-299313448 - NightOwl888
4
一个有趣的替代方案:https://www.benday.com/2018/02/23/force-dotnet-publish-to-publish-dependencies-using-publishwithaspnetcoretargetmanifest/ - tony09uk
1
升级到 .NET Core 2.2 后,我不再需要 PublishWithAspNetCoreTargetManifest 标签。 - Endy Tjahjono
显示剩余2条评论

15

我知道这可能过时了,但以防能帮到其他人,这个方法对我有效:

.csproj文件的PropertyGroup中添加如下内容:<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>


4
我爱上了你!你救了我的一天。 - Teddy
2
当我使用 dotnet test 时,我遇到了这个错误。我将其添加到我的测试项目的 csproj 文件中,问题得到了解决。 - DLeh
这对我也起作用。这是有关此配置的微软文档:https://learn.microsoft.com/zh-cn/dotnet/core/project-sdk/msbuild-props#copylocallockfileassemblies - AGDevX
这对我也起作用了。这是有关此配置的微软文档链接:https://learn.microsoft.com/en-us/dotnet/core/project-sdk/msbuild-props#copylocallockfileassemblies - undefined
1
对我也起作用。我还为我的.net5.0守护进程设置了<NoWin32Manifest>false</NoWin32Manifest>,该进程构建为一个加载System.Drawing.Common 6.0.0的控制台应用程序。runtimeconfig.json和deps.json需要复制到我的发行版bin目录中,同时还需要复制CopyLocalLockFileAssemblies启用时创建的rumtimes/win/lib子树。 - osullivj

13
有时这与启动项目有关,例如,如果迁移是 Azure Functions 项目中的类库。在运行 Add-Migration 命令时,需要确保选择 EF 类库项目作为启动项目。

1
这对我来说是个问题,将启动项目设置为我尝试运行命令的项目解决了它。 - Nicklas Møller Jepsen
这对我有用 - 它需要更多的赞! - ilikeprogramming
对我也起作用。我有两个项目:主应用程序和Web API。主应用程序是一个MAUI应用程序,它抱怨的DLL是Maui,这没有意义,因为我想要迁移在我的Web API项目中。一旦我将Web API项目设置为启动项目,它就完美地工作了。在包管理器控制台中选择项目是不够的。 - Joe Mayo

7

对我来说,标记的答案没有解决问题。我的问题是在尝试Add-Migration时出现的。

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

错误信息如下: enter image description here 我的解决方法是将所有Entityframework软件包降级到2.0.0而不是最新的2.2.0-preview版本。

你得到了什么错误?和问题中的那个一样吗? - Ensar Turkoglu
1
如图所示,与问题中的内容相同。 - Marzouk
@nsarchar 抱歉,到现在为止我还不能理解你的评论和观点? - Marzouk
1
我遇到了和Marzouk一樣的錯誤,但是當我運行add-migration(或在我的情況下是dotnet ef migrations add)時,通過將項目指定為其中一個選項,問題得到了解決。 - John_
4
我尝试使用最新的依赖项,遵循了这篇文章 https://dev.to/azure/using-entity-framework-with-azure-functions-50aa 并且它起作用了。引用原文:“当您构建Azure Functions项目时,Microsoft.NET.Sdk.Functions会对构建工件进行一些组织以创建有效的函数项目结构。它将其中一个.dll移动到子文件夹中,即项目.dll。不幸的是,对于像实体框架迁移这样的设计时工具,它期望.dll在构建目标的根目录下。” - Charanraj Golla

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

enter image description here

如果您想在“非启动”项目(例如我的情况下的InstantOrder.Functions.Data)中搭建dbcontext,则应该像这样添加-StartupProject参数到Scaffold-DbContext命令 -

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

3
使用 dotnet CLI 时,请使用此 --startup-project <startup project>。 - Eric

5
为解决错误信息的前半部分,在应用程序依赖项清单中指定的程序集(...)未找到,请确保在部署到目标服务器时始终使用发布输出。
对于自包含应用程序,可以在以下位置找到:
bin\Release\netcoreapp2.0\win81-x64\publish

或者对于在特定框架下的部署

bin\Release\netcoreapp2.0\publish

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

引用自相关答案。


没有解决我的问题,但是向前迈进了一步 ;)。 - Marek Malczewski

3

个人意见:如果只从构建文件夹中获取文件,则不会提供依赖项的dll。如果发布文件夹,则会提供。这是我的解决方法。


2

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

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

最初的回答:


2

在 Library 项目上运行 Scaffold-DbContext 命令时,我遇到了这个错误。

解决方法:

  1. 从解决方案中移除 Azure Function 项目,然后运行此命令。
  2. 之后,使用添加现有项目功能将 Azure Function 项目再次添加到解决方案中。

在运行“add-migration”时,我在WinUI项目中遇到了类似的问题。我采用了您的方法,即将WinUI应用程序从解决方案中删除,然后运行“add-migration”和“update-database”。然后再将WinUI项目添加回解决方案中。 - Shiva N

1
我的电脑上没有安装正确的.NET Core运行时。我安装了NETCore.App 2.1和2.2,但该项目的目标是2.0。
使用命令dotnet --list-runtimes查看运行时列表。
我从dot.net网站安装了正确的运行时,问题得到解决。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接