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

macOS下CMake自定义目标名称意外覆盖.NET项目AssemblyName导致输出DLL名称不符的问题排查求助

macOS下CMake自定义目标名称意外覆盖.NET项目AssemblyName导致输出DLL名称不符的问题排查求助

各位好,我遇到一个挺奇怪的跨平台构建问题,想请大家帮忙分析下根源:

我有一个包含多个子项目的C++ CMake工程,其中一个子项目是ScriptCore,它本质就是一个ScriptCore.csproj和若干C#脚本文件。

这个子项目的CMake构建逻辑是定义了一个自定义目标,执行dotnet build命令:

add_custom_target(ScriptCore ALL 
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
    COMMAND ${DOTNET_EXE} build ScriptCore.csproj -c ${SCRIPTCORE_CONFIG} -o ${SCRIPTCORE_OUTPUT_DIR}/bin -p:BaseIntermediateOutputPath=${SCRIPTCORE_OUTPUT_DIR}/obj/
)

对应的.csproj配置里,我明确指定了AssemblyName为Phezu-ScriptCore:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <AssemblyName>Phezu-ScriptCore</AssemblyName>
    <TargetFramework>netstandard2.1</TargetFramework>
    <RootNamespace>PhezuEngine</RootNamespace>
    <LangVersion>latest</LangVersion>
    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
  </PropertyGroup>
  <ItemGroup>
    <Compile Include="Source\**\*.cs" />
  </ItemGroup>
</Project>

问题现象

在Windows平台下构建完全正常,输出的DLL是预期的Phezu-ScriptCore.dll;但在macOS上构建时,输出的DLL却变成了ScriptCore.dll——这个名字刚好和CMake里自定义目标的名称一致。

我已经排查过的点

  • 检查了所有中间构建文件,也让dotnet build输出详细日志到文件,全程没找到任何覆盖AssemblyName配置的地方;
  • 手动在终端执行和CMake里完全一样的dotnet build命令时,输出的DLL名称是正确的Phezu-ScriptCore.dll,只有通过CMake触发构建才会出现名称错误的情况。

我的疑问

  1. 为什么CMake里的自定义目标名称会影响到.NET项目的输出DLL名称?按道理两者应该是独立的构建环节才对?
  2. 这种问题只出现在macOS上,Windows完全正常的原因是什么?

我目前不想采用直接重命名DLL或者修改CMake目标名称的临时方案,希望能搞清楚这个现象的根本原因,还请各位大佬指点!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 10:09:32