c# - SingleFile 的 dotnet publish 不包含 .dylib 文件
问题描述
我对 C# 很陌生,在 MacOS Big Sur 上,我首先尝试了 VisualStudio 上提出的“Hello World”。我试图通过这样做使单个文件可执行:
$ dotnet publish -r osx.11.0-x64 -p:PublishSingleFile=true
Microsoft (R) Build Engine version 16.10.2+857e5a733 for .NET
Copyright (C) Microsoft Corporation. All rights reserved.
Determining projects to restore...
All projects are up-to-date for restore.
Hello -> /Users/elapouya/projects/csharp/Hello/Hello/bin/Debug/net5.0/osx.11.0-x64/Hello.dll
Hello -> /Users/elapouya/projects/csharp/Hello/Hello/bin/Debug/net5.0/osx.11.0-x64/publish/
它工作正常:
$ /Users/elapouya/projects/csharp/Hello/Hello/bin/Debug/net5.0/osx.11.0-x64/publish/Hello
Hello World !!
但是为了确保它是一个包含所有内容的独立可执行文件,我只是将它复制到另一个目录中并运行它但它失败了:
$ cd ~/tmp
~/tmp$ cp /Users/elapouya/projects/csharp/Hello/Hello/bin/Debug/net5.0/osx.11.0-x64/publish/Hello .
~/tmp$ ./Hello
Error:
An assembly specified in the application dependencies manifest (Hello.deps.json) was not found:
package: 'runtimepack.Microsoft.NETCore.App.Runtime.osx-x64', version: '5.0.8'
path: 'libSystem.IO.Compression.Native.dylib'
如果我查看使用生成的文件,dotnet publish
我可以看到:
drwxr-xr-x 11 elapouya staff 352 9 aoû 11:29 .
drwxr-xr-x 192 elapouya staff 6144 9 aoû 11:03 ..
-rwxr-xr-x 1 elapouya staff 52687111 9 aoû 11:36 Hello
-rw-r--r-- 1 elapouya staff 9676 9 aoû 11:36 Hello.pdb
-rwxr--r-- 1 elapouya staff 917392 15 jui 21:05 libSystem.IO.Compression.Native.dylib
-rwxr--r-- 1 elapouya staff 70380 15 jui 21:05 libSystem.Native.dylib
-rwxr--r-- 1 elapouya staff 15704 15 jui 21:05 libSystem.Net.Security.Native.dylib
-rwxr--r-- 1 elapouya staff 51588 15 jui 21:05 libSystem.Security.Cryptography.Native.Apple.dylib
-rwxr--r-- 1 elapouya staff 159472 15 jui 21:05 libSystem.Security.Cryptography.Native.OpenSsl.dylib
-rwxr--r-- 1 elapouya staff 2624360 15 jui 21:05 libclrjit.dylib
-rwxr--r-- 1 elapouya staff 6958844 15 jui 21:07 libcoreclr.dylib
这里有很多.dylib
,包括程序执行时发生的错误~/tmp
。
是.csproj
:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<RuntimeIdentifiers>osx.11.0-x64</RuntimeIdentifiers>
<SelfContained>true</SelfContained>
<PublishReadyToRun>true</PublishReadyToRun>
</PropertyGroup>
</Project>
和dotnet --info
:
DK .NET (reflétant tous les fichiers global.json) :
Version: 5.0.302
Commit: c005824e35
Environnement d'exécution :
OS Name: Mac OS X
OS Version: 11.0
OS Platform: Darwin
RID: osx.11.0-x64
Base Path: /usr/local/share/dotnet/sdk/5.0.302/
Host (useful for support):
Version: 5.0.8
Commit: 35964c9215
.NET SDKs installed:
3.1.411 [/usr/local/share/dotnet/sdk]
5.0.302 [/usr/local/share/dotnet/sdk]
.NET runtimes installed:
Microsoft.AspNetCore.App 3.1.17 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 5.0.8 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 3.1.17 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 5.0.8 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
To install additional .NET runtimes or SDKs:
https://aka.ms/dotnet-download
我应该怎么做才能拥有可以在任何 osx 11.0 上的任何位置运行的单个文件可执行文件?
解决方案
现在它可以工作了:最终.csproj
拥有一个最小大小的多合一可执行文件是:
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
<PublishTrimmed>true</PublishTrimmed>
<PublishReadyToRun>true</PublishReadyToRun>
</PropertyGroup>
</Project>
推荐阅读
- tsql - 如何忽略查询中的记录以避免JOIN中的转换错误?
- python - 在条形图中设置不同的颜色
- lua - lua - 如何比较不同的数组
- python - 如何将一个列表中的每个元素乘以另一个列表中的每个元素?
- javascript - IonSlides 在 lastSLide 上渲染一些东西。离子反应
- google-sheets - Google 表格 - [未找到 URL 处的资源]
- java - Android MongoDB Atlas - 使用连接 url 字符串时出错
- gpu - 分析 JAX 代码:什么是 redzone_checker,为什么要花这么多时间?
- prestashop - 如何从模块中调用 FrontController
- perl - 使用 open 函数将 1 添加到文本文件中的列