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

NuGet包编译后命名空间与原代码不一致,如何阻止编译器修改?

解决方案
  • 第一步:检查项目基础配置
    打开Base.Domain类库的.csproj文件,确认以下两个配置项的值正确:
    <PropertyGroup>
      <!-- 根命名空间,确保代码编译时命名空间前缀正确 -->
      <RootNamespace>Base.Domain</RootNamespace>
      <!-- 程序集名,和运行时加载的程序集名称对应,避免出现找不到程序集的错误 -->
      <AssemblyName>Base.Domain</AssemblyName>
    </PropertyGroup>
    
    同时检查项目上级目录是否存在Directory.Build.props、Directory.Build.targets这类全局配置文件,这类文件会批量覆盖子项目的配置,可和正常打包的Api-Base-Contracts项目对比配置差异,快速定位异常配置项。
  • 第二步:验证编译和打包逻辑
    先单独编译Base.Domain项目,用反编译工具直接查看bin目录下生成的本地dll:
    如果本地编译的dll命名空间已经是Domain.Identity,说明问题出在编译环节,和NuGet打包无关;如果本地编译正常,只有打包到NuGet后命名空间异常,说明打包时引入了错误的dll文件,可在nuspec中显式指定打包的文件映射,避免默认打包逻辑拉取到错误文件:
    <!-- 在nuspec的package节点下新增files节点,指定正确的dll路径 -->
    <files>
      <file src="bin/Release/net6.0/Base.Domain.dll" target="lib/net6.0/Base.Domain.dll" />
    </files>
    
    注意将示例中的目标框架版本替换为你实际使用的版本。
  • 第三步:清理缓存重新构建
    执行以下命令彻底清理本地编译缓存和NuGet全局缓存,再重新打包发布:
    dotnet clean
    dotnet nuget locals all --clear
    dotnet build -c Release
    dotnet pack -c Release
    

内容的提问来源于stack exchange,提问作者Hannes Hjärm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:15:02