' dotnet发布'错误引用不存在的lib目录中的依赖项

时间:2017-04-15 19:36:15

标签: dll asp.net-core nuget travis-ci .net-standard

我正在尝试通过Travis CI将dotnet核心Web应用程序部署到Ubuntu VPS。我在使用dotnet restore && dotnet publish -c release -r ubuntu.16.04-x64构建之前将其转换为服务器。构建和部署在Travis上完成得很好,但是当我在服务器上重新启动应用程序服务时,会出现如下所示的错误。

Error: assembly specified in the dependencies manifest was not found -- package: 'microsoft.aspnetcore.antiforgery', version: '1.1.1', path: 'lib/netstandard1.3/Microsoft.AspNetCore.Antiforgery.dll'

作为发布的一部分创建的*.deps.json文件具有如下所示的行。

"microsoft.aspnetcore.antiforgery/1.1.1": {
    "dependencies": {
      "Microsoft.AspNetCore.DataProtection": "1.1.1",
      "Microsoft.AspNetCore.Http.Abstractions": "1.1.1",
      "Microsoft.AspNetCore.Http.Extensions": "1.1.1",
      "Microsoft.AspNetCore.WebUtilities": "1.1.1",
      "Microsoft.Extensions.ObjectPool": "1.1.0",
      "NETStandard.Library": "1.6.1"
    },
    "compile": {
      "lib/netstandard1.3/Microsoft.AspNetCore.Antiforgery.dll": {}
    }
  },
  "microsoft.aspnetcore.authorization/1.1.1": {
    "dependencies": {
      "Microsoft.Extensions.Logging.Abstractions": "1.1.1",
      "Microsoft.Extensions.Options": "1.1.1",
      "NETStandard.Library": "1.6.1",
      "System.Security.Claims": "4.3.0"
    },
    "compile": {
      "lib/netstandard1.3/Microsoft.AspNetCore.Authorization.dll": {}
    }
},

那些"编译"属性是导致问题的原因,因为如果我手动删除lib/netstandard1.3/Microsoft.AspNetCore.Antiforgery.dll的编译属性,则错误现在变为:

Error: assembly specified in the dependencies manifest was not found -- package: 'microsoft.aspnetcore.authorization', version: '1.1.1', path: 'lib/netstandard1.3/Microsoft.AspNetCore.Authorization.dll'

为什么在*.deps.json文件中创建这些编译属性?他们需要吗?如果是这样,为什么在lib时没有创建dotnet publish目录?如果没有,我该如何删除它们才能运行我的应用程序?

感谢。

1 个答案:

答案 0 :(得分:4)

所以,我再次重新阅读docs并注意到我忽略了一个小细节。我一直在部署netcoreapp1.1的所有内容,而不仅仅是netcoreapp1.1/publish的内容。所以,我的服务器正在执行netcoreapp1.1中的.dll而不是netcoreapp1.1/publish中的.dll。这解决了我的所有问题。