【问题标题】:Install a dotnet executable into PATH on linux在 linux 上将 dotnet 可执行文件安装到 PATH 中
【发布时间】:2019-07-05 14:32:04
【问题描述】:

我正在尝试构建我的可执行文件,然后通过将其复制到/usr/local/bin 来“安装”它,这样它就可以直接在 bash 中运行。

我这样构建我的项目:

$ dotnet publish -c Release --self-contained -r linux-x64 -o out

这会创建一个这样的目录(它还包含许多.DLL 文件):

$ ls bionitio/out/bionitio*
bionitio/out/bionitio
bionitio/out/bionitio.deps.json
bionitio/out/bionitio.dll
bionitio/out/bionitio.pdb
bionitio/out/bionitio.runtimeconfig.json
[...]

然后我可以直接执行它,效果很好:

$ bionitio/out/bionitio --help


Usage: bionitio [arguments] [options]

但如果我将它复制到更全球化的地方,它会失败:

$ cp bionitio/out/bionitio /usr/local/bin
$ /usr/local/bin/bionitio --help
A fatal error occurred, the required library libhostfxr.so could not be found at /usr/local/bin/

但是,我使用--self-contained 标志来构建它,为什么它仍然依赖于libhostfxr.so

【问题讨论】:

  • "那么为什么它仍然依赖于 libhostfxr.so" .. 不知道。您可以尝试将其部署到“普通”文件夹,然后将其符号链接到 /bin/
  • 如果 .NET Core 未安装到默认位置,请检查 github.com/dotnet/cli/issues/9114
  • ldd /usr/local/bin/bionitio 应该告诉你运行时链接器看到了什么。我猜你需要用-Wl,-R,'$ORIGIN/../lib' -Wl,--enable-new-dtags 构建你的共享对象/dll。我不确定是否可以使用 Microsoft 工具。也许您可以使用chrpath 更改运行时路径。

标签: .net linux .net-core


【解决方案1】:

自包含 选项与应用程序一起发布运行时,它发布在同一目录中,而不是打包在单个输出文件中。

它消除了已安装框架对目标机器的依赖。您需要将所有已发布的文件复制到要从中运行应用程序的目录。

--独立的

将 .NET Core 运行时与您的应用程序一起发布,以便运行时 不需要安装在目标机器上。如果运行时 指定标识符,其默认值为true。

https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-publish

【讨论】:

    猜你喜欢
    • 2020-10-30
    • 2019-02-19
    • 2022-08-11
    • 2020-04-23
    • 1970-01-01
    • 2023-04-07
    • 2019-03-15
    • 2017-04-28
    • 1970-01-01
    相关资源
    最近更新 更多