如何设置 Azure Devops 来构建 Devexpress XAF-XPO 项目?

How do I set up Azure Dev Ops to build Dev Express XAF-XPO project?

我想在 Azure Devops 中为 XAP 移动应用程序设置持续集成和部署。

为了获得 CI/CD 我需要设置 Azure Pipeline 以安装正确的包。

Hosting your own NuGet feeds 上的文档中有一些信息 和 Get started with NuGet packages in Azure DevOps

Dev Express 解释说他们目前不提供 XAF 的 Nuget 提要,但我可以自己制作 Delegate's DCNugetPackageBuilder

使用DXNugetPackageBuilder制作Nuget包

按照说明,我下载了 .pdb 文件,将它们解压缩到 c:\tmp\symbols

我还下载了 DXNugetPackageBuilder 并根据说明编辑了 buildPackages.bat。

接下来我 运行 build.ps1 在提升的 Powershell

这在 C:\tmp\Nuget

创建了 .nupkg 文件

默认情况下,这使用位于

的文件
 C:\Program Files (x86)\DevExpress 18.1\Components\Bin\Framework

和位于

的 .pdb 文件
c:\tmp\symbols

使用 Nuget.Exe 和凭据提供程序将包推送到 feed

“连接到源”屏幕提到我需要下载 Nuget.exe 和凭据提供程序

这是 the Credentials Provider

上的文档

我解压缩了包含 VSTS CredentialProviders Nuget.Exe。

下一步是按照“连接到 Feed”屏幕的 "add this feed" 部分给出的说明进行操作。

例如

nuget.exe push -Source "SBDDevExpress" -ApiKey VSTS c:\tmp\Nuget\DevExpress.Data.18.1.6.0.nupkg

我 运行 遇到访问被拒绝的问题

然后我就可以推送所有我想要的包了。

设置 Nuget 包源

在打开解决方案的 VS2017 中,我使用了工具 -> Nuget 包管理器 -> 包管理器设置

我添加了将 Azure 终结点设置为包源的包设置。

构建错误

当我 运行 构建管道时,我得到类似

的错误
The type or namespace DevExpress could not be found are you missing a directive or assembly reference?

来自学习 Updater.cs 和 Module.cs 看来我缺少 Nuget 提要中的以下命名空间。

DevExpress.ExpressApp.DC;
DevExpress.ExpressApp.Updating;
DevExpress.Persistent.BaseImpl.PermissionPolicy;

[更新]

DevExpress 建议我将 bin 文件夹中生成的 dll 与我的包提要进行比较。

我找到了几个丢失的文件并推送了他们的包。

我现在有

XafMobile.Module\Properties\licenses.licx(1.0): Error LC0003: Unable to resolve type 'DevExpress.ExpressApp.ModuleBase"

从源码可以看出ModuleBase是publicclass中的一个DevExpress.ExpressApp

我想知道这是否与反射有关。

Dev Express 上提到了它 support

[更新]

我尝试删除许可文件并同步项目。 现在错误显示为缺少程序集引用

此外,当我重建我的解决方案时,属性文件夹中的许可文件丢失了

不知是否this helps explain it

[更新]

Manuel G运行der [DevExpress MVP] 和 DXNugetPackageBuilder 作者解释说

” 使用 nuget.packages 时,您还需要通过 nuget 引用它们 as he explains here

原样explained here

"When working with nuget.packages you need to reference them via nuget as well. Thats the reason why it did not work in the first place."