我正在使用Azure DevOps,为 ASP.NET Web应用程序构建管道。
导致问题的大多数设置几乎都是默认设置,除了构建解决方案任务中的 msbuild 参数、内部版本号、开头应该只更新版本号的 powershell 脚本、我知道的命令行任务不是原因,因为我在第一次遇到问题后添加了它来处理其他事情, 以及几个命令行任务,仅显示 D: 文件夹的内容。
msbuild 参数是:
/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true
/p:SkipInvalidConfigurations=true
/p:PackageLocation="$(build.artifactstagingdirectory)\"
/p:UseWPP_CopyWebApplication=true /p:OutDir="$(build.artifactstagingdirectory)"
/p:Version=$(buildNumber)
NuGet 还原任务指向我的项目中的源。 提要包含MyPackage.problem,MyPackage.problem.blah(其中blah代表几个不同的名称),MyPackage.Other1,MyPackage.Other2,MyPackage.Other3,MyPackage.Other4和其他3个包。 它还从 Nuget.org 那里获得了一些包裹。
一切似乎都很好,直到构建步骤,当我收到错误时
命名空间中不存在类型或命名空间名称"problem" "MyPackage"(是否缺少程序集引用?
我第一次尝试进行故障排除涉及查看问题包的内部,它们与其他包明显不同:它们在主目录中有一个 .csproj 文件和几个.cs文件,以及其他包没有的一些文件夹,尽管它们之间的名称和编号不同,并且它们缺少一个 lib 文件夹。 其他文件夹似乎都井井有条。
更新:不确定这是否相关,但我又看了一下 .nuspec 文件。 我比较了 Azure Devops 中 MyPackage.problem 中的 .nuspec 文件,并将其与开始切换到 Azure DevOps 之前(以及我处理该项目之前)的适当结构版本以及解压缩存储库中的 .nuspec 文件进行了比较。 它们是相同的,除了在第一行中,在 Azure DevOps 中创建的包具有以下内容:
<?xml version="1.0" encoding="utf-8"?>
而其他人有:
<?xml version="1.0"?>
从我在网上找到的内容来看,"encoding="utf-8"通常存在,但事实上,它在解压缩的存储库文件和结构正确的包中都没有,这让我认为它可能以某种方式相关。
我终于设法弄清楚了,或者至少看起来我做到了。 问题似乎是我尝试使用 Nuget Pack 任务从项目中的 .nuspec 文件创建包,由于缺少全局 .nuspec 文件,这导致了多个单独的包。 我和我的上司交谈,询问在 Azure DevOps 之外如何正常制作包,他向我指出了详细说明如何从.dll文件创建包的说明。 使用命令行脚本任务,我运行
nuget spec -AssemblyPath [path to .dll]
然后使用"复制文件"任务将.dll文件(在生成解决方案任务期间创建)从 build.artifactstaging目录复制到工作目录中的 lib/net40 文件夹。 之后,我运行了 Nuget pack 任务,针对命令行脚本创建的 .nuspec 文件,除了包含工作目录中的其他文件夹外,还以正确的结构成功创建了包,但这些似乎并没有妨碍功能,如果需要,排除它们可能相当简单。