Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 让我的项目每次都在新签出时编译的一些技巧是什么?_.net_Version Control_Build Process_Vcs Checkout - Fatal编程技术网

.net 让我的项目每次都在新签出时编译的一些技巧是什么?

.net 让我的项目每次都在新签出时编译的一些技巧是什么?,.net,version-control,build-process,vcs-checkout,.net,Version Control,Build Process,Vcs Checkout,我不愿意承认的是,很多时候,我让刚接触某个项目的人进行签出,却发现他们缺少各种资源、dll和设置。我想养成一个正确的习惯,让我的项目能够像刚结帐时一样顺利地编译 关于如何组织我的项目,使它们在从版本控制重新签出时不会出现编译问题,有哪些提示或建议 我已经开始在我的项目中保留一个“资源”文件夹,其中包含源代码管理中所有需要的dll引用。其他人能提出一些建议吗?像这样的工具可以帮助解决依赖性问题(尽管您可能需要查看文档以获取信息……) 持续集成工具,如在每次签入后重复签出并构建应用程序,可提醒您签入

我不愿意承认的是,很多时候,我让刚接触某个项目的人进行签出,却发现他们缺少各种资源、dll和设置。我想养成一个正确的习惯,让我的项目能够像刚结帐时一样顺利地编译

关于如何组织我的项目,使它们在从版本控制重新签出时不会出现编译问题,有哪些提示或建议

我已经开始在我的项目中保留一个“资源”文件夹,其中包含源代码管理中所有需要的dll引用。其他人能提出一些建议吗?

像这样的工具可以帮助解决依赖性问题(尽管您可能需要查看文档以获取信息……)


持续集成工具,如在每次签入后重复签出并构建应用程序,可提醒您签入会破坏构建。。。此外,它们还可以运行您的单元测试,从而提醒您因签入而导致的任何倒退…

任何资源/DLL/设置都应与源代码一起签入版本控制

它们应该与源代码一样被标记和处理,这将允许您将这些资源与源代码关联起来,并将源代码/资源/设置作为单个实体来处理

在我的公司,我们使用RationalClearCase除了生成的源代码文件(例如,从MIDL编译器生成的.cpp和.h文件),所有内容都将签入源代码管理。因此,大多数构建都相当顺利

您还需要确保正确设置依赖项,以便在更改源文件时,重新构建所有依赖库

还有谁能提出一些建议吗

  • 将需要构建的文件保存在一个位置(一个目录及其子目录)。。。大多数版本控制系统称之为“工作目录”
  • 您的版本控制软件有一个命令,用于列出工作目录中的内容与版本控制下的内容之间的差异。。。此“差异”包括存在于工作目录中且不受版本控制的文件
  • 调整版本控制软件以排除(从步骤2显示的列表中)您不想存储其类型的文件。。。例如,您可能希望只存储源代码,而排除
    *.obj
    等等。。。排除这些文件类型意味着,当您运行步骤2时,差异列表中不会出现您不打算存储的文件
  • 考虑使用一台构建机器,它会自动签出和构建(如果“构建被破坏”,它会给您发送电子邮件)

  • 您可以在每次签入之前建立一个全面的检查表,但这将非常耗时且容易出错(特别是在多个开发人员之间,并不是每个人都有每次都严格遵循检查表的个性特征)

    相反,建立一个简单的持续集成服务器-是开源的;by JetBrains是免费的-每次签入时都会检查构建工作


    这样,您就可以肯定了,而不是因为遵循了检查表而推断事情是可行的。

    SCons是另一个跨平台工作并帮助管理依赖关系的工具。与中的gnumake类似,您有一个“scons文件/脚本”——它使用python这一事实给了您很大的灵活性


    (我没有任何事情要做,我们只是使用它)

    找到一台没有使用的旧计算机,并将其设置为自动“滚动构建”:

  • 等到有人登记换衣服
  • 更新至所有文件的最新版本
  • 清理所有非源代码管理文件(
    makeclean
    还不够-扫描碎片并将其移除)
  • 建造
  • 运行单元测试
  • 每天保存一次成功运行的二进制文件。称之为当天的“正式建造” 如果构建或测试失败,请发送包含错误的电子邮件。包括在#2中拾取的更改列表


    如果你真的,真的找不到机器,那就在虚拟机中进行。

    假设你在Visual Studio环境中,这里有一些你可能会觉得有用的东西,当然,请注意,我们使用Subversion,但任何VCS工具都应该这样做

    • 将所有(或尽可能多的)依赖项置于版本控制之下,并在项目中引用这些依赖项。我们使用Subversion外部来管理这一点
    • 不控制标准输出目录(bin、obj)的版本,即使用svn:ignore
    • 同样,忽略版本控制用户项(*.user,*.suo)
    • 另外,不要对配置文件(App | Web.config)进行版本控制,而是创建一个App.default.config,并在您的项目中在构建任务之前将该文件复制到App.config。这使您可以通过使用正则表达式和令牌为每个开发人员或构建服务器设置编译来获得乐趣,还允许您删除CI构建上的任何现有App.config文件,以确保每次都有一个原始的构建。这还允许开发人员在准备好之前不必打扰其他人就可以随意使用配置,例如更新App.default.config
    • 版本控制(其他一切:)
    • 如果编译后需要对二进制文件(MSI、DLL输出等)进行版本控制,请在后生成目标项目(wixproj等)中将输出复制到另一个受版本控制的目录中。使用Subversion的一个技巧是,您可以添加/提交到svn:externals目录,该目录允许您将库等推送到引用它们的项目中
    最后一个提示-在您完成干净的签出并成功编译后,检查工作副本中是否有任何修改,例如:TortoiseSVN->check for modifications。如果检测到更改,则这些