如何使用绝对路径参考文件夹构建VSTS项目?

时间:2018-06-30 05:07:47

标签: azure-devops azure-pipelines

我在TFS中有两个项目,WebSiteReference,它们遵循以下结构:

  

$ \

     
      
  • 网站:要构建的主要项目

  •   
  • 参考:具有许多可引用dll的存储库。

  •   

Website.dll使用Reference中存在的dll,但由于多种原因,它们不包含在同一解决方案中,并且可能被映射到不遵循VSTS结构的不同文件夹。

因此,为了使Website项目在本地编译,已将Reference上的Hintpath的.dll Website.csproj手动更改为所有人都通用的特定绝对路径开发人员的机器。

现在,我们正在体验CI / CD,而让VSTS进行构建/部署的肮脏而乏味的工作这一假设让我们感到非常兴奋。事实是,由于Reference.dll与Website不在同一个项目中,因此构建最终缺少必需的库(上述Reference文件夹)而失败。

是否有一种方法可以告诉VSTS GET Reference的dll(此时已编译),将其复制到正在构建的目录Website.csproj中,并让它们用来建造主要项目吗?

我尝试过的事情:

第一:

  
      
  • Get Sources步骤中映射网站和参考
  •   
  • 使用Copy Files任务,将Source FOlder设置为$ \ References,将目标文件夹设置为$(Agent.BuildDirectory)
  •   
  • 构建
  •   

现在:

  
      
  • 在主项目中添加了所有引用。
  •   

在两种情况下均未找到任何引用,而

  

找不到类型或名称空间名称'(namespacehere)'(您是否缺少using指令或程序集引用?)

引发错误。

我一直在搜索vsts帮助部分,但似乎找不到任何明显的解决方案。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

主要是由于参考文件的dll未添加到源代码管理(TFVC存储库)中。

首先,请确保将参考的dll添加到网站项目中。因此,项目文件将包含以下引用(以下示例中的引用为ClassLibrary1.dll):

<Reference Include="ClassLibrary1">
  <HintPath>..\..\ClassLibrary1\ClassLibrary1\bin\Debug\netstandard2.0\ClassLibrary1.dll</HintPath>
</Reference>

然后,您可以使用以下任何选项来使引用的dll工作。

选项1:将引用的dll添加到源代码管理中

如果已将.tfignore文件添加到TFVC存储库中,它将忽略**\bin,下的文件和文件夹,因此默认情况下,参考dll不会签入TFVC存储库。您可以按照以下选项将参考dll签入TFVC存储库:

  1. 排除.tfignore中的参考dll

    排除您要在.tfignore中引用的dll。格式为:

    !**\referencename.dll
    

    例如!**\ClassLibrary1.dll

  2. 将参考dll添加到源代码管理中

    在VS中-> Source Control Explorer->将项目添加到文件夹->选择dll。

    enter image description here

  3. 签入并再次检查dll是否已添加到TFVC存储库中

    在“ VS待更改”窗口中,将dll和.tfignore文件显示为“已更改”,请检入更改。

    enter image description here

    再次检查dll是否已添加到VSTS网页的TFVC存储库中。

    enter image description here

选项2:在构建网站项目之前先构建参考项目

如果您不想将dll添加到源代码管理中,还可以先构建参考解决方案,以便在构建网站项目之前生成参考dll。详细信息如下:

编辑构建定义->在构建网站项目之前添加VS构建任务(指定参考解决方案)->保存构建并将其排队。

注意:对于选项2,您在相对路径中指定的构建配置应与VSTS构建定义中的构建配置一致。

例如,我在相对路径Debug中指定了..\..\ClassLibrary1\ClassLibrary1\bin\Debug\netstandard2.0\ClassLibrary1.dll。因此,在我的VSTS构建定义中,VS构建任务用于构建参考项目,构建配置必须为Debug

enter image description here

现在,无论使用哪种选项,VSTS构建都不会显示错误消息The type or namespace name '(namespacehere)' could not be found

答案 1 :(得分:0)

解决此问题的正确方法是不将引用存储在源代码管理中。将它们转换为软件包,将其存储在软件包管理源中,并在构建过程中将其还原。开发人员将在构建时自动还原它们。