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

KSw*_*t87 30 upgrade nuget-package asp.net-web-api2 .net-core asp.net-core

我将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
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释这究竟意味着什么的细节吗?我认为它的版本不匹配,但为什么会发生这种情况?我认为NuGet包的最新稳定版本不应该有这样的问题.

我能够通过将Microsoft.AspNetCore.All从2.0.5降级到2.0.3来解决这个问题,但是我想找到一个更好的解决方案来解决这个问题,这样我就可以使用这个软件包的最新版本了.

Ste*_*lba 51

开发机器通常安装了SDK,但仅在生产时运行时.

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

<PropertyGroup>               
    <PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

  • 添加该属性究竟有什么作用?它是否使 SDK 安装在目标机器上?它如何使我的软件包使用最新版本或您拥有的东西? (3认同)
  • 如果未安装SDK,它将导出运行所需的DLL.您会注意到已发布的文件夹大小已增加,其中包含更多文件. (2认同)
  • 一个有趣的替代方法https://www.benday.com/2018/02/23/force-dotnet-publish-to-publish-dependencies-using-publishwithaspnetcoretargetmanifest/ (2认同)

小智 19

我知道这可能很旧,但为了以防万一它可以帮助别人,这个对我有用:

添加: <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>

.csproj文件中的PropertyGroup

  • 我爱上你了!拯救了我的一天。 (4认同)
  • 当我使用“dotnet test”时,出现了这个错误。我将其添加到我的测试项目的 csproj 文件中,它修复了它 (3认同)

Jir*_*ong 9

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


Mar*_*ouk 6

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

Add-Migration -Name initial-migration -Context Mysln.Data.MyDbContext -StartupProject Mysln -Project Mysln.Core
Run Code Online (Sandbox Code Playgroud)

错误是这样的: 在此处输入图片说明

我通过将所有 Entityframework 包降级到 2.0.0 而不是最新的 2.2.0-preview 来解决它。

  • @Marzouk我正在尝试使用最新的依赖项,我遵循了这篇文章,它起作用了https://dev.to/azure/using-entity-framework-with-azure-functions-50aa。引用原始帖子“当你构建一个Azure Functions 项目 Microsoft.NET.Sdk.Functions 对构建工件进行一些组织以创建有效的函数项目结构。它移动到子文件夹的 .dll 之一是项目 .dll。不幸的是,对于设计 -像实体框架迁移这样的时间工具,它期望 .dll 位于构建目标的根目录” (4认同)

Sea*_*leh 5

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

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

bin\Release\netcoreapp2.0\win81-x64\publish
Run Code Online (Sandbox Code Playgroud)

或用于依赖于框架的部署

bin\Release\netcoreapp2.0\publish
Run Code Online (Sandbox Code Playgroud)

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

摘自相关答案。


Meg*_*oje 5

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

在此处输入图片说明

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

Scaffold-DbContext "Server=..." -Project InstantOrder.Functions.Data -StartupProject InstantOrder.Functions.Data 
Run Code Online (Sandbox Code Playgroud)

  • 使用 dotnet CLI 时,请使用 --startup-project &lt;启动项目&gt; (3认同)