Azure devops 如何使用绝对路径引用文件夹构建VSTS项目?
我在TFS中有两个项目,Azure devops 如何使用绝对路径引用文件夹构建VSTS项目?,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,我在TFS中有两个项目,网站和参考,它们遵循以下结构: $\ 网站:主要建设项目 参考:包含许多可参考DLL的存储库 Website.dll使用Reference中现有的dll,但由于多种原因,它们不包含在同一解决方案中,并且可能映射到不遵循VSTS结构的不同文件夹 因此,为了让网站项目在本地编译,已手动将网站.csproj上的参考的.dllsHintpath更改为所有开发人员机器通用的特定绝对路径 现在,我们正在体验CI/CD,并且我们对让VST进行构建/部署这项肮脏而乏味的工作的假设
网站
和参考
,它们遵循以下结构:
$\
- 网站:主要建设项目
- 参考:包含许多可参考DLL的存储库
Website.dll
使用Reference
中现有的dll,但由于多种原因,它们不包含在同一解决方案中,并且可能映射到不遵循VSTS结构的不同文件夹
因此,为了让网站项目在本地编译,已手动将网站.csproj
上的参考
的.dllsHintpath
更改为所有开发人员机器通用的特定绝对路径
现在,我们正在体验CI/CD,并且我们对让VST进行构建/部署这项肮脏而乏味的工作的假设感到兴奋。问题是,由于Reference.dll和网站不在同一个项目中,所以构建最终缺少必要的库(前面提到的参考文件夹)并失败
有没有办法告诉VST获取参考
的DLL(此时编译),将它们复制到目录网站。csproj
正在构建中,让它们用于构建主项目
我所尝试的:
第一:
- 在
步骤中映射网站和参考Get Sources
- 使用
任务,将复制文件
设置为$\References,将目标文件夹设置为$(Agent.BuildDirectory)源文件夹
- 建造
- 在主项目中添加了所有引用
非常感谢您的帮助。正确的方法是不要在源代码管理中存储引用。将它们转换为包,存储在包管理提要中,并在构建期间恢复它们。开发人员将在构建时自动恢复它们。这主要是由于引用的DLL没有添加到源代码管理(TFVC repo)中 首先,请确保将引用的DLL添加到网站项目中。因此,项目文件将包含以下引用(
ClassLibrary1.dll
作为以下示例中的引用):
比如**\ClassLibrary1.dll
.tfignore
文件作为包含的更改,签入更改
并再次检查DLL是否添加到VSTS网页中的TFVC repo中
中指定了Debug
。\..\ClassLibrary1\ClassLibrary1\bin\Debug\netstandard2.0\ClassLibrary1.dll
。因此,在我的VSTS构建定义VS build task中,要构建参考项目,构建配置必须是Debug
现在,无论您使用哪个选项,VSTS build都不会显示错误消息。
找不到类型或命名空间名称“(namespacehere)”
谢谢您的详细回答,@Marina。如果我决定使用第二个选项,两个项目是否会在同一个输出文件夹中生成二进制文件?或者我必须执行复制任务才能将文件从一个路径移动到另一个路径吗?@EricWu二进制文件将分别在每个项目的bin
文件夹下生成。没有必要使用复制文件tass,因为已经定义了它来搜索引用项目下的dll(在我的示例中是路径。\..\ClassLibrary1\ClassLibrary1\bin\Debug\netstandard2.0\ClassLibrary1.dll
)。提醒一下:您应该在Get sources步骤中映射所有项目,所以只需将本地路径留空(),vsts build将把所有文件从TFVC repo获取到$(build.sourcesDirectory)
。在这种情况下,两个项目必须存在于同一个解决方案中,对吗?在我的场景中,这些项目属于不同的解决方案。不加入它们仍然可能吗?并非所有项目都位于同一个解决方案中。项目属于不同的解决方案可以吗?你有没有重新构建,结果如何?我基本上是使用第一种方法构建的,它适用于所有目的(因此我将你的答案标记为答案)。不过,我还是对第二种方法感到好奇。如果项目不在同一个解决方案中,是否意味着它们必须通过文件系统路径进行引用?
<Reference Include="ClassLibrary1">
<HintPath>..\..\ClassLibrary1\ClassLibrary1\bin\Debug\netstandard2.0\ClassLibrary1.dll</HintPath>
</Reference>
!**\referencename.dll