我正在尝试构建可执行文件,然后通过将其复制到/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
?
答案 0 :(得分:1)
自包含选项与应用程序一起发布运行时,它在同一目录中发布,而不是打包在单个输出文件中。
它删除了已安装框架对目标计算机的依赖性。您需要将所有已发布的文件复制到要从中运行应用程序的目录。
-自包含
与您的应用程序一起发布.NET Core运行时,以便运行时 不需要在目标计算机上安装。如果运行时 指定了标识符,其默认值为true。
https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-publish