我正在寻找一个优雅的解决方案 - 如果有一个问题 - 链接到项目外的共享程序集属性文件,然后将该项目推送到TFS进行构建。
我正在将所有本地解决方案和项目转换为源代码控制(已经很长时间了)并将共享代码作为NuGet包发布。我的新设计为每个包强制执行一个解决方案,每个解决方案包含一个主项目和一个测试项目。换句话说,每个解决方案一个工作装配。
以前,当我只使用本地计算机工作时,我会在给定的解决方案中引用其中几个“库”项目,因此链接的共享文件解决方案运行良好,例如<Assembly: AssemblyCompany("My Company")>
。对于注册表项命名等,这些属性之间的一致性非常重要。
但现在将这些项目发送到构建服务器会出现问题;链接文件在服务器上不存在,因此构建自然会失败。
我正在努力避免为我创建的每个新项目手动编辑AssemblyInfo.vb
文件所带来的繁琐和人为错误。链接是完美的,但它现在不再有效。 (代码也需要在开发期间本地运行,因此在构建步骤中调整它不是一种选择。)
我是源代码控制和构建架构的新手;有什么好伙伴在那里解决这个问题?
答案 0 :(得分:0)
在构建项目时(在当前仓库中),应找到项目引用的所有程序集。
由于某些程序集不在当前仓库中(在另一个/库仓库中管理),并且库仓库与当前仓库没有任何关系,因此在构建项目时您将错过库仓库的程序集。
为了从库repo获取程序集,您应该在当前repo和库repo之间“添加关系”。通常使用两种方式:submodules和subtree。
主要仓库可以从子模块仓库获取功能,因此在从主仓库构建项目时可以使用库仓库的引用。使用的命令如下:
#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中找到程序集。
假设程序集在库仓库的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)
解决方案非常简单。
以下是:
ServiceInfo.vb
copy / y $(SolutionDir).. \ ServiceInfo.vb $(SolutionDir)ServiceInfo.vb
$(SolutionDir)ServiceInfo.vb
根据您的代码,步骤3中的构建可能会失败,因为它无法找到ServiceInfo.vb
。没问题,只需在您在步骤#4中创建链接后重新构建它。
这将确保您的Git发布到TFS中包含ServiceInfo.vb
,并确保您在服务器上的构建步骤成功。