如何将自定义 dll 从私有存储库添加到 azure dev ops 管道?

How do I add a custom dll to an azure dev ops pipeline from a private repository?

我是 Azure Dev Ops 的新手,我正在尝试为我的项目创建管道。该项目最初处于颠覆状态,依赖于我公司维护的一些自定义可下载库。我正在尝试将这些自定义 dll 添加到构建过程中,以便 nuget restore 命令成功。 dll 位于源代码库中的 "packages" 代码库中。如何将这些 dll 添加到构建管道?如有任何帮助,我们将不胜感激!

如果您说您的存储库包含构建应用程序所需的一些 dll,那么您遇到的问题与 nuget restore 无关。 Nuget 恢复只需下载链接的 nuget 包。在您的情况下,您需要获取 dll 来构建应用程序。您可以使用 multi repo approach 并获得您的 subversion 存储库和新的。或者您可以使用脚本步骤并直接调用 svn 命令行来获取特定文件夹(以及构建所需的文件)。由于 windows 和 ubuntu 主机代理都安装了 svn,您已经完成了一半。请记住,您需要将 dll 放到正确的文件夹中,以便 MSBuild 可以在构建时找到它们。

另一种方法是为这些 dll 创建 nuget 包,然后将它们保存在 Azure Feed 中。然后更改项目中的引用,以便它们将依赖于 nuget 包而不是直接依赖 dll 文件。

How do I add a custom dll to an azure dev ops pipeline from a private repository?

有几个方向可以满足您的要求。根据您的描述,这些是 dll 而不是 nuget 包。这是我喜欢的两种方式:

1.If你熟悉nuget,可以create nuget packages for those dlls. Then publish the nuget package to the Azure Devops nuget feed。之后,您可以轻松使用 Nuget Restore Task 来恢复这些包:

先决条件:您的项目应该使用nuget包的方式来管理dll,这意味着您需要编辑项目的项目文件。您的项目应该引用 csproj 中的 nuget 包,而不是直接使用 hintpath 引用 dll ...

优点: 当您在 .net 核心中工作时,Nuget 是管理 dll 的常用工具。 azure devops Feed 支持私有 feed,因此在您授予访问权限之前,任何人都无法访问您的 feed。

缺点:您必须做一些关于 packing/publishing dll 和编辑项目文件 (xx.xxproj) 的工作。

2.If 你的团队坚持使用单个 dll 而不是将它们打包到 nuget 包中,那么你就不必担心 nuget restore step。您需要确保构建步骤可以找到丢失的程序集。

例如,在本地计算机中,我的项目依赖于 windows 桌面中的一个程序集。那么它的 xx.csproj 有:

    <Reference Include="ClassLibrary1">
      <HintPath>..\..\..\..\Desktop\ClassLibrary1.dll</HintPath>
    </Reference>

很明显,如果我将它部署到 Azure Devops,它会失败,因为管道找不到相同的路径。对于这个问题,我的想法是在项目目录中创建一个空的 Dlls 文件夹,并将该文件夹添加到源代码管理中。另外,将项目文件中的 HintPath 编辑为 <HintPath>Dlls\ClassLibrary1.dll</HintPath>

现在在 devops 管道中,我可以添加一个 git 任务或运行 git 命令的 cmd 任务以从私有存储库下载程序集。然后是一个命令行任务,将程序集复制到 System.DefaultWorkingDirectory 下的 Dlls 文件夹中。最后,构建过程也能成功。

我只是为你的场景展示了两个方向,实际上还有其他方向。其中,我强烈推荐nuget packages+Azure Devops Feed方式,因为配置好后更方便。希望以上对大家有所帮助。