Linux 上的 .NET Core 运行时包存储



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

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

找不到应用程序依赖项清单 (RuntimePackageConsole.deps.json) 中指定的程序集: 包:"Newtonsoft.Json",版本:"11.0.1" path: 'lib/netstandard2.0/Newtonsoft.Json.dll' 此程序集应位于本地运行时存储中,因为应用程序是使用以下目标清单文件发布的:项目.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 资产在磁盘上的布局方式:

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

https://learn.microsoft.com/en-us/dotnet/core/deploying/runtime-store

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

最新更新