我在TFS中有两个项目,WebSite
和Reference
,它们遵循以下结构:
$ \
网站:要构建的主要项目
参考:具有许多可引用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帮助部分,但似乎找不到任何明显的解决方案。
非常感谢您的帮助。
答案 0 :(得分:1)
主要是由于参考文件的dll未添加到源代码管理(TFVC存储库)中。
首先,请确保将参考的dll添加到网站项目中。因此,项目文件将包含以下引用(以下示例中的引用为ClassLibrary1.dll
):
<Reference Include="ClassLibrary1">
<HintPath>..\..\ClassLibrary1\ClassLibrary1\bin\Debug\netstandard2.0\ClassLibrary1.dll</HintPath>
</Reference>
然后,您可以使用以下任何选项来使引用的dll工作。
如果已将.tfignore
文件添加到TFVC存储库中,它将忽略**\bin,
下的文件和文件夹,因此默认情况下,参考dll不会签入TFVC存储库。您可以按照以下选项将参考dll签入TFVC存储库:
排除.tfignore
中的参考dll
排除您要在.tfignore
中引用的dll。格式为:
!**\referencename.dll
例如!**\ClassLibrary1.dll
。
将参考dll添加到源代码管理中
在VS中-> Source Control Explorer->将项目添加到文件夹->选择dll。
签入并再次检查dll是否已添加到TFVC存储库中
在“ VS待更改”窗口中,将dll和.tfignore
文件显示为“已更改”,请检入更改。
再次检查dll是否已添加到VSTS网页的TFVC存储库中。
如果您不想将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
。
答案 1 :(得分:0)
解决此问题的正确方法是不将引用存储在源代码管理中。将它们转换为软件包,将其存储在软件包管理源中,并在构建过程中将其还原。开发人员将在构建时自动还原它们。