缺少Linux运行时存储错误,仅使用.NET Core 2.0运行时

缺少Linux运行时存储错误,仅使用.NET Core 2.0运行时

问题描述:

我正在将一些应用程序从.NET Core 1.1更新到2.0。这些应用做工精细本地,但是,我的Linux更新运行VM和部署后,我收到错误:缺少Linux运行时存储错误,仅使用.NET Core 2.0运行时

在应用程序依赖清单 (foo.deps.json)指定的组件没有被发现: 包:'Microsoft.ApplicationInsights.AspNetCore',版本:'2.1.1' 路径:'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; aspnetco re-store-2.0.0-win7-x86.xml

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

我可以安装整个SDK,而且工作正常,但我宁愿继续只使用运行时。

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

更新2017年12月4日

ASP.NET的核心运行时是现在上市的.NET核心主下载页上。 https://www.microsoft.com/net/download/linux

更新2017年10月3日

您也可以从包装输入安装。

有关添加了.NET Core包这个链接,说明饲料的贴切,百胜,zypper的,和其他人: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 

原来的答复

你可以从这里下载只是ASP.NET运行时的核心店:

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可执行文件并行。

+0

谢谢。我没有找到任何有关这方面的文件。将它添加到运行时下载页面以及https://docs.microsoft.com/en-us/aspnet/core/publishing/linuxproduction中是有意义的。如果将运行时商店设置合并到dotnet-install.sh –

+0

是的,我会联系我们的文档团队以改进此操作。 – natemcmaster

为CentOS 7,以下为我工作:

  1. 下载并安装运行时:

    的mkdir -p /家庭/ DOTNET & &焦油ZXF DOTNET运行时,2.0.0- Linux的x64.tar.gz -C /家庭/ DOTNET

  2. 下载并安装SDK “这是一个必须得到Asp.Net核心存储文件夹

    mkdir -p/home/dotnetSDK & & tar zxf dotnet-sdk-2.0.0-linux-x64.tar。GZ -C /家庭/ dotnetSDK

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

    CP -rp /家庭/ dotnetSDK /存储/家庭/ DOTNET /存储

  4. 删除SDK :在官方的文档解释

    RM -dfr /家庭/ dotnetSDK

  5. 集 '的dotnet' 到PATH(下面是不是永久性的):

    出口PATH = $ PATH:/家庭/ 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. 

最后:压缩/存档/家庭/ DOTNET让你赢在未来部署相同版本2.0.0需要步骤2,4。

Runtime package store documentation,你可以添加以下到您的.csproj文件:

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

,当你使用dotnet publish的依赖将被包括在内。

我遇到过这个问题,因为我的dotnet SDK版本落后于Microsoft.AspNetCore.All软件包版本。使版本匹配(通过恢复软件包或升级主机SDK)可以解决我的问题。愚蠢的错误,但希望它会帮助某人。