You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何禁止dotnet publish在Linux下将dll文件标记为可执行文件

禁用dotnet publish在Linux下给DLL加可执行权限的方法

在Linux环境执行dotnet publish时,所有输出的托管DLL被默认标记为可执行权限,是.NET SDK的已知默认行为,从.NET 7 SDK版本开始官方提供了原生配置项可以直接关闭该逻辑,不需要额外执行后置chmod命令。

  • 项目永久生效配置
    打开你项目的.csproj文件,在任意<PropertyGroup>节点下添加如下配置即可,后续所有构建、发布操作都不会再给DLL文件自动加可执行位:

    <UnixSetExecutableBitOnManagedLibraries>false</UnixSetExecutableBitOnManagedLibraries>
    

    如果你是通过发布配置文件(.pubxml)管理发布参数,把上述配置加到对应pubxml文件的PropertyGroup里即可,仅对使用该配置的发布生效。

  • 单次发布临时生效
    如果不想修改项目文件,可以在执行dotnet publish命令时通过/p参数动态传入该配置,示例:

    dotnet publish -c Release -r linux-x64 --self-contained true /p:UnixSetExecutableBitOnManagedLibraries=false
    
  • .NET 6及更早版本处理方案
    上述配置项是.NET 7 SDK新增的能力,如果你使用的是.NET 6或更低版本,没有原生开关可以关闭该默认行为,你当前使用的发布后执行chmod -x *.dll的方案是完全可靠的:.NET运行时加载DLL依赖时完全不依赖文件的可执行权限位,移除该权限不会对程序运行造成任何影响。

补充说明:该默认逻辑的初衷是支持用户直接通过./入口程序.dll的方式在Linux下启动应用(依赖DLL头部的shebang标记和文件可执行位),但SDK早期实现没有区分入口程序集和第三方依赖DLL,粗暴给所有输出DLL加上了可执行位,属于设计上的不合理之处,高版本SDK已经在迭代优化该逻辑。

内容的提问来源于stack exchange,提问作者lonix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 01:45:43