Linux上的.NET核心运行时包存储

Linux上的.NET核心运行时包存储,linux,.net-core,package,runtime,store,Linux,.net Core,Package,Runtime,Store,我创建了一个控制台应用程序,并添加了Newtonsoft.json作为测试的参考 在遵循这些步骤之后,我将应用程序(netcoreapp2.0)发布到ubuntu.16.04-x64版本,并将其部署到ubuntu(16.04)机器上,当我运行控制台应用程序时,即使包存在于/usr/local/share/dotnet/store中,它也总是显示以下错误 找不到应用程序依赖项清单(RuntimePackageConsole.deps.json)中指定的程序集: 软件包:“Newtonsoft.Js

我创建了一个控制台应用程序,并添加了Newtonsoft.json作为测试的参考

在遵循这些步骤之后,我将应用程序(netcoreapp2.0)发布到ubuntu.16.04-x64版本,并将其部署到ubuntu(16.04)机器上,当我运行控制台应用程序时,即使包存在于/usr/local/share/dotnet/store中,它也总是显示以下错误

找不到应用程序依赖项清单(RuntimePackageConsole.deps.json)中指定的程序集: 软件包:“Newtonsoft.Json”,版本:“11.0.1” 路径:“lib/netstandard2.0/Newtonsoft.Json.dll” 当使用以下目标清单文件发布应用程序时,此程序集应位于本地运行时存储中:artifact.xml

我将依赖项Json文件中的Newtonsoft.Json.dll的路径更改为绝对路径后,它就可以工作了


有人在Linux上有同样的问题吗?或者,我如何才能找到原因,为什么应用程序不能在依赖项json文件中按相对路径加载包?

发布代码时,您的目标似乎是清单

从.NET Core 2.0开始,可以根据目标环境中存在的一组已知包对应用程序进行打包和部署。这些好处包括更快的部署、更低的磁盘空间使用率以及在某些情况下改进的启动性能

此功能作为运行时包存储实现,它是磁盘上存储包的目录(通常在macOS/Linux上位于/usr/local/share/dotnet/store,在Windows上位于C:/Program Files/dotnet/store)。在这个目录下,有架构和目标框架的子目录。文件布局类似于NuGet资产在磁盘上的布局方式:

目标清单文件列出运行时包存储中的包。开发者可以在发布应用程序时将此清单作为目标。目标清单通常由目标生产环境的所有者提供


因此,您可能希望查看一下您的环境,并确保您的包存储确实具有所需的库,或者您在发布时没有清单。

您遵循了哪些发布步骤?是否将NewtonsoftJson.dll添加到发布输出(
dotnet publish
)?我使用清单发布。不,发布输出不包含Newtonsoft.json.dll,应用程序应该在运行时从运行时包存储加载它。是的,我使用清单发布了它。清单中的包确实存在于运行时包存储目录中,但我的应用程序仍然无法正确加载它们。