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

时间:2020-04-16 22:35:13

标签: azure-devops nuget-package-restore

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

2 个答案:

答案 0 :(得分:2)

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

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

1。如果您熟悉nuget,则可以create nuget packages来获取这些dll。然后publish the nuget package to the Azure Devops nuget feed。之后,您可以轻松使用Nuget Restore Task还原那些软件包:

enter image description here

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

优势::当您在.net core中工作时,Nuget是用于管理dll的常用工具。而且azure devops Feed支持私有供稿,因此在您授予访问权限之前,没有人可以访问您的供稿。

缺点::您必须完成一些有关打包/发布dll以及编辑项目文件(xx.xxproj)的工作。

2。如果您的团队坚持使用单个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的方式,因为配置好它们后会更加方便。希望以上所有对您有所帮助。

答案 1 :(得分:1)

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

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