热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Mac上的“dotnet发布”会创建一个.dll,但在Linux上会生成一个可执行文件?

c#当我dotnetpublish使用Mac在控制台应用程序上运行时,结果.dll在bi

c#

当我dotnet publish使用 Mac 在控制台应用程序上运行时,结果.dllbin/Debug//publish目录中。

当我使用 Microsoft .NET SDK Docker 容器在相同的源代码上运行相同的命令时,结果是一个可执行的二进制文件,除了.dll.

为什么会有差异?为什么不在dotnet publishmacOS 上生成可执行的二进制文件?

我已经使用 .NET Core 3.1 和 .NET 5.0 进行了尝试,并得到了相同的结果。这是我的 .NET 5.0 进程:

首先,我跑dotnet new console从头开始生成一个新项目。我在生成的输出中没有改变任何东西。生成的.csproj看起来像这样:



Exe
net5.0
MyApp


dotnet publish从 macOS运行会产生以下结果:

$ dotnet publish
Microsoft (R) Build Engine version 16.8.3+39993bd9d for .NET
Copyright (C) Microsoft Corporation. All rights reserved.
Determining projects to restore...
Restored /src/my-app.csproj (in 68 ms).
my-app -> /src/bin/Debug/net5.0/my-app.dll
my-app -> /src/bin/Debug/net5.0/publish/
$ ls -al bin/Debug/net5.0/publish/
total 56
drwxr-xr-x 6 user staff 192B Feb 17 09:49 ./
drwxr-xr-x 9 user staff 288B Feb 17 09:49 ../
-rw-r--r-- 1 user staff 409B Feb 17 09:49 my-app.deps.json
-rw-r--r-- 1 user staff 4.5K Feb 17 09:49 my-app.dll
-rw-r--r-- 1 user staff 9.2K Feb 17 09:49 my-app.pdb
-rw-r--r-- 1 user staff 139B Feb 17 09:49 my-app.runtimeconfig.json

dotnet publish从 Docker 容器内部运行会产生以下结果:

$ docker run -it --mount src="$(pwd)",target=/src,type=bind mcr.microsoft.com/dotnet/sdk:5.0
root@d143004612a8:/src# dotnet publish
Microsoft (R) Build Engine version 16.8.3+39993bd9d for .NET
Copyright (C) Microsoft Corporation. All rights reserved.
Determining projects to restore...
Restored /src/my-app.csproj (in 99 ms).
my-app -> /src/bin/Debug/net5.0/my-app.dll
my-app -> /src/bin/Debug/net5.0/publish/
root@d143004612a8:/src# ls -al bin/Debug/net5.0/publish/
total 164
drwxr-xr-x 7 root root 224 Feb 17 16:53 .
drwxr-xr-x 10 root root 320 Feb 17 16:53 ..
-rwxr-xr-x 1 root root 138736 Feb 17 16:53 my-app
-rw-r--r-- 1 root root 409 Feb 17 16:53 my-app.deps.json
-rw-r--r-- 1 root root 4608 Feb 17 16:53 my-app.dll
-rw-r--r-- 1 root root 9304 Feb 17 16:53 my-app.pdb
-rw-r--r-- 1 root root 139 Feb 17 16:53 my-app.runtimeconfig.json

所以我的问题是:给定同一个项目,为什么一个输出可执行二进制文件,而另一个不输出?

回答


由于 macOS 公证要求,应用程序主机可执行文件生成在 macOS 上默认关闭

您可以通过将UseAppHost属性设置True为构建属性-p:UseAppHost=True或在 csproj 文件中手动覆盖它:


True







推荐阅读
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • SecureCRT是一款功能强大的终端仿真软件,支持SSH1和SSH2协议,适用于在Windows环境下高效连接和管理Linux服务器。该工具不仅提供了稳定的连接性能,还具备丰富的配置选项,能够满足不同用户的需求。通过SecureCRT,用户可以轻松实现对远程Linux系统的安全访问和操作。 ... [详细]
  • 在《Linux高性能服务器编程》一书中,第3.2节深入探讨了TCP报头的结构与功能。TCP报头是每个TCP数据段中不可或缺的部分,它不仅包含了源端口和目的端口的信息,还负责管理TCP连接的状态和控制。本节内容详尽地解析了TCP报头的各项字段及其作用,为读者提供了深入理解TCP协议的基础。 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • Parallels Desktop for Mac 是一款功能强大的虚拟化软件,能够在不重启的情况下实现在同一台电脑上无缝切换和使用 Windows 和 macOS 系统中的各种应用程序。该软件不仅提供了高效稳定的性能,还支持多种高级功能,如拖放文件、共享剪贴板等,极大地提升了用户的生产力和使用体验。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 基于Linux系统的Kickstart自动化服务器部署方案
    本文针对企业需求,提出了一种基于Linux系统的Kickstart自动化服务器部署方案。该方案旨在通过无盘批量安装操作系统,提高企业IT基础设施的部署效率。Kickstart是一种利用Anaconda工具实现服务器自动化安装的技术,能够显著简化和加速操作系统的安装过程。通过详细的实施规划,本文介绍了Kickstart的工作原理及其在实际部署中的应用,为企业提供了高效的自动化部署解决方案。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • 本文详细探讨了Zebra路由软件中的线程机制及其实际应用。通过对Zebra线程模型的深入分析,揭示了其在高效处理网络路由任务中的关键作用。文章还介绍了线程同步与通信机制,以及如何通过优化线程管理提升系统性能。此外,结合具体应用场景,展示了Zebra线程机制在复杂网络环境下的优势和灵活性。 ... [详细]
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
  • 在基于.NET框架的分层架构实践中,为了实现各层之间的松散耦合,本文详细探讨了依赖注入(DI)和控制反转(IoC)容器的设计与实现。通过合理的依赖管理和对象创建,确保了各层之间的单向调用关系,从而提高了系统的可维护性和扩展性。此外,文章还介绍了几种常见的IoC容器实现方式及其应用场景,为开发者提供了实用的参考。 ... [详细]
author-avatar
安乐乐520
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有