Azure DevOps Artifacts私有NuGet包自定义描述不生效,始终显示为“default”
我完全懂你现在的困扰——在Azure DevOps里把NuGet包发布到私有Artifacts feed时,包的描述一直卡在默认的"default",试了AssemblyInfo.cs和.nuspec都没搞定,确实挺闹心的。结合你贴出来的Pipeline配置,我给你梳理几个靠谱的解决方向:
1. 直接在SDK风格项目的.csproj里配置描述(最推荐)
如果你的项目是SDK风格(现在.NET项目基本都是这个类型),手动写的AssemblyInfo.cs大概率会被项目自动生成的内容覆盖,所以直接在.csproj里设置元数据才是最稳妥的:
打开你的xxxx.csproj文件,添加或修改<PropertyGroup>里的描述相关字段:
<PropertyGroup> <!-- 核心:自定义包描述 --> <Description>这是我的私有NuGet包,用于XX业务场景</Description> <!-- 可选补充其他元数据 --> <Authors>我的团队</Authors> <PackageLicenseExpression>MIT</PackageLicenseExpression> <PackageProjectUrl>https://dev.azure.com/我的组织/我的项目</PackageProjectUrl> </PropertyGroup>
保存后重新运行Pipeline,dotnet pack会自动读取这些属性生成NuGet包的元数据,Artifacts里就能看到自定义描述了。
2. 如果要用.nuspec文件,必须在pack任务里指定路径
要是你坚持想用.nuspec来管理元数据,得确保Pipeline的dotnet pack任务明确指定这个文件的路径,不然dotnet会默认用csproj的配置。修改你的pack任务:
- task: DotNetCoreCLI@2 condition: eq(variables['Build.SourceBranchName'], 'main') displayName: 'dotnet pack' inputs: command: pack packagesToPack: '/home/vsts/work/1/s/src/xxx/xxxx.csproj' arguments: '--configuration $(BuildConfiguration)' versioningScheme: byEnvVar versionEnvVar: PackageVersion # 新增:指定nuspec文件路径 nuspecPath: '/home/vsts/work/1/s/src/xxx/xxxx.nuspec'
同时,确保你的.nuspec文件里正确配置了<description>节点:
<?xml version="1.0" encoding="utf-8"?> <package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd"> <metadata> <id>你的包ID</id> <version>$PackageVersion$</version> <!-- 可以引用环境变量的版本号 --> <authors>我的名字</authors> <description>这里填写你的自定义包描述内容</description> </metadata> </package>
注意:如果同时配置了csproj和nuspec,dotnet pack会优先使用nuspec里的设置。
3. 排查AssemblyInfo.cs不生效的原因(适合非SDK风格项目)
如果你的项目是非SDK风格,手动写的AssemblyInfo.cs才会生效,但要确保里面的描述字段是正确的:
[assembly: AssemblyDescription("自定义包描述")] [assembly: AssemblyTitle("包的标题")]
要是还是不生效,可能是项目设置里自动生成了AssemblyInfo,你可以在csproj里禁用自动生成:
<PropertyGroup> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> </PropertyGroup>
最后提醒一句:修改完配置后,记得重新触发Pipeline,发布后在Artifacts页面刷新一下,有时候缓存会导致显示旧的默认描述。
备注:内容来源于stack exchange,提问作者toto'

