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
相关产品推荐
相关产品推荐

