首页 > 解决方案 > 如何使用绝对路径引用文件夹构建 VSTS 项目?

问题描述

我在 TFSWebSite和中有两个项目Reference,它们遵循以下结构:

$\

  • 网站:待建的主要项目

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

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

因此,为了让网站项目在本地编译,Reference's.dlls HintpathatWebsite.csproj已手动更改为所有开发人员机器通用的特定绝对路径。

现在,我们正在体验 CI/CD,我们对让 VSTS 完成构建/部署的肮脏、乏味工作的假设感到兴奋。问题是,由于 Reference.dll 与 Website 不在同一个项目中,构建最终会缺少必要的库(前面提到的 Reference 文件夹)并且失败。

有没有办法告诉 VSTSGET Reference的 dll(此时已编译),将它们复制到Website.csproj正在构建的目录并让它们用于构建主项目?

我试过的:

第一的:

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

现在:

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

在这两种情况下,都没有找到任何引用,并且

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

抛出错误。

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

任何帮助是极大的赞赏。

标签: azure-devopsazure-pipelines

解决方案


这主要是由于引用的 dll 没有添加到源代码管理(TFVC repo)中。

首先,请确保将参考的 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. 排除参考 dll.tfignore

    排除您要在.tfignore. 格式为:

    !**\referencename.dll
    

    比如!**\ClassLibrary1.dll

  2. 将引用 dll 添加到源代码管理中

    在 VS -> 源代码管理资源管理器 -> 将项目添加到文件夹 -> 选择 dll。

    在此处输入图像描述

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

    在 VS 挂起更改窗口中,将显示 dll 和.tfignore文件作为 Inculded 更改,签入更改。

    在此处输入图像描述

    并仔细检查 dll 是否已添加到 VSTS 网页的 TFVC 存储库中。

    在此处输入图像描述

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

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

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

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

比如我Debug在相对路径中指定的..\..\ClassLibrary1\ClassLibrary1\bin\Debug\netstandard2.0\ClassLibrary1.dll。所以在我的 VSTS 构建定义中,构建参考项目的 VS 构建任务,构建配置必须是Debug.

在此处输入图像描述

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


推荐阅读