TFS构建期间的共享程序集属性

时间:2017-11-26 22:31:15

标签: git version-control shared-libraries .net-assembly projects-and-solutions

我正在寻找一个优雅的解决方案 - 如果有一个问题 - 链接到项目外的共享程序集属性文件,然后将该项目推送到TFS进行构建。

我正在将所有本地解决方案和项目转换为源代码控制(已经很长时间了)并将共享代码作为NuGet包发布。我的新设计为每个包强制执行一个解决方案,每个解决方案包含一个主项目和一个测试项目。换句话说,每个解决方案一个工作装配。

以前,当我只使用本地计算机工作时,我会在给定的解决方案中引用其中几个“库”项目,因此链接的共享文件解决方案运行良好,例如<Assembly: AssemblyCompany("My Company")>。对于注册表项命名等,这些属性之间的一致性非常重要。

但现在将这些项目发送到构建服务器会出现问题;链接文件在服务器上不存在,因此构建自然会失败。

我正在努力避免为我创建的每个新项目手动编辑AssemblyInfo.vb文件所带来的繁琐和人为错误。链接是完美的,但它现在不再有效。 (代码也需要在开发期间本地运行,因此在构建步骤中调整它不是一种选择。)

我是源代码控制和构建架构的新手;有什么好伙伴在那里解决这个问题?

2 个答案:

答案 0 :(得分:0)

在构建项目时(在当前仓库中),应找到项目引用的所有程序集。

由于某些程序集不在当前仓库中(在另一个/库仓库中管理),并且库仓库与当前仓库没有任何关系,因此在构建项目时您将错过库仓库的程序集。

为了从库repo获取程序集,您应该在当前repo和库repo之间“添加关系”。通常使用两种方式:submodulessubtree

选项1:将库repo视为当前仓库的子模块

主要仓库可以从子模块仓库获取功能,因此在从主仓库构建项目时可以使用库仓库的引用。使用的命令如下:

#In local current repo
git submodule add <URL for the library repo>
#change the reference path correspondingly
git add .
git commit -m 'add the library repo as submodule'
git push

现在构建项目可以从库repo中找到程序集。

选项2:将库仓库中的分支视为当前仓库的子树

假设程序集在库仓库的master分支中进行管理,因此您可以将库分支库中的主分支添加到当前仓库:

# In local current repo
git subtree add --prefix=library <URL for the library repo> master
# change the reference path correspondingly
git add .
git commit -m 'add library master branch as subtree'
git push

现在项目也可以成功建立。

答案 1 :(得分:0)

解决方案非常简单。

以下是:

  1. 在每个项目中,删除现有的ServiceInfo.vb
  2. 链接
  3. 将此命令插入每个项目的预构建事件中
      

    copy / y $(SolutionDir).. \ ServiceInfo.vb $(SolutionDir)ServiceInfo.vb

  4. 构建每个项目以复制文件
  5. 在每个项目中,链接到$(SolutionDir)ServiceInfo.vb
  6. 根据您的代码,步骤3中的构建可能会失败,因为它无法找到ServiceInfo.vb。没问题,只需在您在步骤#4中创建链接后重新构建它。

    这将确保您的Git发布到TFS中包含ServiceInfo.vb,并确保您在服务器上的构建步骤成功。