【问题标题】:Matching source with binaries in Visual Studio development在 Visual Studio 开发中将源代码与二进制文件匹配
【发布时间】:2010-07-06 17:51:06
【问题描述】:

我想知道人们使用什么方法来保证他们正在查看的源代码与他们正在调试的二进制文件相匹配。我是一个单独的开发人员,管理着相当大的代码集,我发现在调试应用程序时,我总是想确定生成错误的二进制文件是否与我正在查看的代码完全匹配。我构建了一个简单的应用程序来比较二进制文件,并想知道其他人是否正在使用这种方法,或者使用其他方法,如版​​本控制等。

【问题讨论】:

    标签: visual-studio-2008 versioning


    【解决方案1】:

    Visual Studio 不为你做这件事吗?

    每当您尝试加载二进制文件的符号/源代码时,VS 都会检查 pdb 文件(如果您想调试源代码而不仅仅是程序集,则需要该文件)是否与二进制文件匹配。不确定确切的机制,但它工作得很好:如果 pdb 不匹配,VS 拒绝加载,同样,如果源与二进制文件不匹配,VS 拒绝在源中设置断点。

    编辑:另见选项->调试->常规:有一个选项要求源文件与原始版本完全匹配。选中后,VS 会在单步执行与二进制文件不完全匹配的源文件时发出警告。

    根据评论进行编辑:虽然我看不出有十个可执行文件的充分理由,但这是我在项目中进行版本控制的方式;它可以用来做你要求的事情。

    • 每个项目的 AssemblyInfo 仅包含描述、公司、...,以及包含示例的注释部分

      //VERSION_MAJOR 2 //VERSION_MAJOR 1

      (这些文件也被签入svn btw)

    • 此外,每个项目中都有一个 AssemblyVersion.cs,再次包含一些注释掉的代码

      //VERSION_BUILD 1223 //VERSION_QFE 10

      还有实际的版本号,例如

      [assembly: AssemblyFileVersion ( "2.1.1223.10" )]

      (这些文件没有签入 svn,但我有一个简单的脚本可以在新签出后生成它们)

    • 我的所有项目都导入一个具有公共属性的基础项目,其中一个预构建事件调用可执行文件,该可执行文件执行有趣的工作:它可以读取和写入 VERSION_XXX 数字以及 AssemblyFileVersion 字符串。预构建看起来像

      <Exec Command="versioner -d$(ProjectDir) -f$(ProjectDir)Properties\AssemblyInfo.cs" />

      它读取 AssemblyInfo.cs 以获取主版本号,读取 AssemblyVersion.cs 以获取其他编号,将 BUILD 设置为主项目目录的当前 svn 修订版,增加 QFE 编号并写回 AssemblyVersion.cs。递增数字是实现您想要的结果的关键:除非您溢出 QFE 编号,否则没有单个构建将具有相同的版本。

    对于我使用的 C++

    #define VERSION_MAJOR 2
    

    等,它们被传递到一个资源文件中,该文件用数字填充 VERSIONINFO 部分。

    因此,在您的情况下,在调试时,您会查看版本文件并将数字与二进制文件的版本进行比较。除此之外,您还必须检查每个单个源文件的最后修改日期不比版本文件的最后修改日期新,否则您仍然不确定。

    【讨论】:

    • 我会重申这个问题。我给你一个 VS2008 C# 项目和 10 个二进制文件,并希望你告诉我,如果有任何二进制文件将与源将构建的二进制文件完全匹配。
    • “增加一个数字是实现你想要的关键:没有一个单一的版本会有相同的版本......”这正是我不想要的,完全相同的多个版本代码,这是您通过自动递增版本获得的。我要做的是简化问题,这就是为什么我将问题重述为假设情况以澄清问题。我将从更实际的角度重申这个问题。一位程序员在他老板的电脑上读到一封意外打开的电子邮件,告诉他他将在 8 周后被解雇。他决定种一棵
    • 版本控制脚本中的错误。他被解雇了,他的计划奏效了,在他被解雇 8 周后,他的诡计被发现了。您将获得一大笔钱来确定分散在 25 台不同客户端计算机上的 30 个二进制文件中哪些是相同的,哪些是不同的,并且使用日期,您将相应地重新分配版本号。你如何进行?
    • 在那种情况下:对不起,不知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多