在仅安装.NET Core 2.0运行时的Linux系统上出现缺失运行时存储错误。

10

我正在将一些应用从.NET Core 1.1更新到2.0。这些应用在本地工作得很好,但在更新了Linux VM上的运行时并部署后,我遇到了错误:

应用程序依赖清单(foo.deps.json)中指定的程序集未找到: package: 'Microsoft.ApplicationInsights.AspNetCore', version: '2.1.1' path: 'lib/netstandard1.6/Microsoft.ApplicationInsights.AspNetCore.dll'
预期此程序集在本地运行时存储库中,因为该应用程序是使用以下目标清单文件发布的: aspnetcore-store-2.0.0-linux-x64.xml;aspnetcore-store-2.0.0-osx-x64.xml; aspnetcore-store-2.0.0-win7-x64.xml;aspnetcore-store-2.0.0-win7-x86.xml

我认为这是因为当您使用Microsoft.AspNetCore.All包时,运行时下载不会生成所需的新运行时存储库文件夹。

我可以安装整个SDK,这样就可以正常工作,但我更愿意继续仅使用运行时。

如何在无需在生产服务器上安装SDK的情况下手动生成运行时缓存?

5个回答

8

更新 2017年12月4日

ASP.NET Core运行时现在已经列在.NET Core的主要下载页面上。 https://www.microsoft.com/net/download/linux

更新 2017年10月3日

您也可以从软件包源安装。

请参阅此链接,了解有关为apt、yum、zypper和其他软件包管理器添加.NET Core软件包源的说明:https://github.com/dotnet/core/blob/master/release-notes/download-archives/2.0.0-download.md#installing-net-core-on-linux

例如,如果您想在Ubuntu 16上安装,则应执行以下操作:

curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-xenial-prod xenial main" > /etc/apt/sources.list.d/dotnetdev.list'
sudo apt update
sudo apt install aspnetcore-store-2.0.0

Translated answer:

您可以从这里下载ASP.NET Core运行时存储:

https://dist.asp.net/runtimestore/2.0.0/linux-x64/aspnetcore.runtimestore.tar.gz

同时,您还需要下载.NET Core 2.0.0运行时(请参见https://github.com/dotnet/core/blob/master/release-notes/download-archives/2.0.0-download.md)。

将两者都提取到同一个文件夹中,即运行时存储档案中“store”和“additionalDeps”文件夹应与dotnet可执行文件并列。


谢谢。我没有找到关于这个的任何文档。将其添加到运行时下载页面以及https://learn.microsoft.com/en-us/aspnet/core/publishing/linuxproduction是有意义的。如果将运行时存储设置合并到dotnet-install.sh中,那就更好了。 - Paul Hiles

2

我遇到了这个问题,是因为我的dotnet SDK版本落后于Microsoft.AspNetCore.All包的版本。通过使版本匹配(通过还原软件包或升级主机SDK),解决了我的问题。虽然犯了一个愚蠢的错误,但希望它能帮助别人。


2
根据 Runtime package store documentation,您可以在.csproj文件中添加以下内容:
<PropertyGroup>
  <PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
</PropertyGroup>

当您使用dotnet publish时,依赖项将被包含在内。


0

在运行时机器

sudo yum install aspnetcore-store-2.0.7

注意!请安装您的版本,而不是“2.0.7”

对我来说它有效。

0

对于CentOS 7,以下方法适用:

  1. 下载并安装运行时:

    mkdir -p /home/dotnet && tar zxf dotnet-runtime-2.0.0-linux-x64.tar.gz -C /home/dotnet

  2. 下载并安装SDK "这是必须的,以获取Asp.Net Core存储文件夹"

    mkdir -p /home/dotnetSDK && tar zxf dotnet-sdk-2.0.0-linux-x64.tar.gz -C /home/dotnetSDK

  3. 将存储文件夹从SDK复制到运行时:

    cp -rp /home/dotnetSDK/store /home/dotnet/store

  4. 删除SDK:

    rm -dfr /home/dotnetSDK

  5. 按照官方文档中的说明将 'dotnet' 设置为PATH(下面的设置不是永久性的):

    export PATH=$PATH:/home/dotnet

现在您可以测试并确认其是否正常工作:

# dotnet WebApiTest.dll
info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
      User profile is available. Using '/root/.aspnet/DataProtection-Keys' as key repository; keys will not be encrypted at rest.
info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[58]
      Creating key {87d17c5a-120f-4204-b316-52027a264791} with creation date 2017-08-17 16:34:49Z, activation date 2017-08-17 16:34:49Z, and expiration date 2017-11-15 16:34:49Z.
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
      No XML encryptor configured. Key {87d17c5a-120f-4204-b316-52027a264791} may be persisted to storage in unencrypted form.
info: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[39]
      Writing data to file '/root/.aspnet/DataProtection-Keys/key-87d17c5a-120f-4204-b316-52027a264791.xml'.
Hosting environment: Production
Content root path: /home/dotnet/WebApiTest
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.

最后: 压缩/归档 /home/dotnet,这样您将来部署相同的发行版本2.0.0时就不需要执行步骤2、3和4了。


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