确定 .NET 程序集是否是从同一源构建的

2024-01-02

有谁知道如何比较两个 .NET 程序集以确定它们是否是从“相同”源文件构建的?

我知道有一些差异实用程序可用,例如 Reflector 插件,但我对查看 GUI 中的差异不感兴趣,我只是想要一种自动方法来比较二进制文件集合以查看它们是否是从相同(或等效)的源文件。我知道多个不同的源文件可能会产生相同的 IL,并意识到该过程只会对 IL 中的差异敏感,而不是原始源。

仅比较两个程序集的字节流的主要障碍是 .NET 在程序集中包含一个名为“MVID”(模块版本标识符)的字段。对于每次编译,这似乎都有不同的值,因此如果您构建相同的代码两次,程序集将会不同。

一个相关的问题是,有谁知道如何强制每次编译的 MVID 相同?这将避免我们需要一个对 MVID 值的差异不敏感的比较过程。一致的 MVID 会更好,因为这意味着可以使用标准校验和。

这背后的背景是,在我们被允许发布到生产环境之前,第三方公司负责独立审查和签署我们的版本。这包括审查源代码。他们希望独立确认我们提供给他们的源代码与我们之前构建、测试和当前计划部署的二进制文件相匹配。我们正在寻找一种流程,允许他们从我们提供给他们的源中独立构建系统,并将校验和与我们测试过的二进制文件的校验和进行比较。

顺便提一句。请注意,我们正在使用持续集成、自动构建、源代码控制等。该问题与内部缺乏对哪些源文件进入给定构建的控制无关。问题是第三方负责验证我们提供给他们的源代码是否生成与我们已经测试并计划投入生产的相同的二进制文件。他们不应该信任我们的任何内部系统或控制,包括构建服务器或源代码控制系统。他们关心的只是获取与构建相关的源代码,自己执行构建,并验证输出是否与我们所说的正在部署的内容相匹配。

比较解决方案的运行速度并不是特别重要。

thanks


使用命令行工具从 IL 的文本表示中过滤掉 MVID 和日期时间戳并不算太痛苦。假设 file1.exe 和 file2.exe 是从相同的源构建的:

c:\temp> ildasm /all /text file1.exe |查找/v“时间日期戳:”|查找/v“MVID”> file1.txt

c:\temp> ildasm /all /text file2.exe |查找/v“时间日期戳:”|查找/v“MVID”> file2.txt

c:\temp> fc file1.txt file2.txt

比较文件 file1.txt 和 FILE2.TXT

FC:没有遇到任何差异

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

确定 .NET 程序集是否是从同一源构建的 的相关文章

  • 如何在.NET中将Assembly类的对象保存到磁盘

    我已将其编码为磁盘上的 Base64 字符串 它需要 dll 表示 我可以将它加载到 Assembly 对象中 但找不到保存它的方法 谢谢 那么 1 如何将Assembly类的对象保存到磁盘 2 如何将base64编码的程序集保存到二进制d
  • COM 互操作注册

    我有一个正在暴露的 NET 程序集COM http en wikipedia org wiki Component Object Model 该程序集有两个公共接口和一个公共类 当我构建程序集时 我收到此警告 AssemblyName dl
  • 在 Windows 窗体应用程序 (.net) 中单击图像的 X/Y 坐标

    有没有办法知道在 FORMS 应用程序中单击了哪些 x y 坐标 看看鼠标事件参数 http msdn microsoft com en us library system windows input mouseeventargs memb
  • 转换BitmapImage后内存未释放

    我遇到以下 C 测试 代码的问题 public static void TestBitmap2ByteArray BitmapImage bitmap JpegBitmapEncoder encoder new JpegBitmapEnco
  • WPF 元素宿主内存泄漏

    我在 Windows 窗体上使用元素主机时遇到奇怪的内存泄漏 我有一个主窗体 它打开另一个窗体 该窗体上只有 elementhost 控件 此时 它没有 wpf 控件子控件 只能打开 1 个主机表单 每次我打开窗体时 应用程序内存都会增加2
  • 如何正确复制/克隆结构?我应该使用一个类吗?

    假设我有那个 Structure myStruct Public myPoint As Point Public myBool As Boolean End Structure 如何复制 克隆该结构 我现在解决了这个问题 我使用的代码示例
  • 如何在不发送电子邮件的情况下检查 smtp 服务器? [复制]

    这个问题在这里已经有答案了 我有一个 Web 应用程序 用户可以设置 SMTP 服务器信息 服务器 主机 SMTP 端口 用户名 密码 电子邮件地址 使用的 SSL 当用户设置信息时我需要验证服务器而不发送电子邮件并检查smtp信息是否有效
  • 如何查找局域网中所有主机上正在运行的程序的所有实例?

    出于实际目的 SqlDataSourceEnumerator 的作用是查找在 LAN 上的各个 PC 上运行的 SQL Server 的所有实例 是否有等效的方法可以查找任意应用程序的运行实例 编辑 好的 所以这只有效 因为这些应用程序有预
  • 即使在 GC Collect 和 WaitForPendingFinalizers 之后,窗口对象在关闭后也未释放?

    这是一个简单的测试应用程序 可帮助了解 WPF 内存使用情况 我想了解的关键是为什么MainWindow即使在关闭并等待 GC 完成之后 仍然被引用并且它的内存没有被释放 参见下面的代码清单 文本 MainWindow Finalizer
  • 计算按月分隔的两个日期之间的天数

    我需要计算两个日期之间的天数 DateTime 但有一个转折 我想知道这两天跨越的每个月有多少天 两个人有简单的方法吗 Example 我的开始日期是 30 03 2011 结束日期是 05 04 2011 那么结果应该是这样的 var r
  • 运行 t4 脚本作为 resx 文件的自定义工具

    我有一个资源文件MyResource resx 我想改变MyResource Designer cs文件生成 我有一个 t4 脚本 它接受 resx 文件作为输入并给出结果转换 但是 我必须手动运行此 t4 才能使其工作 我看到 resx
  • 如何动态加载包含非托管代码的原始程序集?(绕过“无法验证的代码失败策略检查”异常)

    我将举一个使用的例子系统 Data SQLite DLL http sqlite phxsoftware com 这是一个包含非托管代码的混合程序集 如果我执行这个 var assembly Assembly LoadFrom System
  • Confuser .NET 混淆器。安全吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我目前正在开发一个应用程序 其中阻止用户反编译代码非常重要 现在 我意识到 如果由经验丰富的程序员执行 大多数 exe 都是可反编译的
  • 解决找不到程序集的问题 |文件未找到异常 |融合日志

    我正在尝试将我的解决方案包 wsp 部署到 SharePoint 2007 环境 WSP 包含一个功能 该功能加载功能接收器类以在运行时部署计时器作业 在部署此 WSP 时 我不断得到 特征 fb631f6c 2c46 4ab5 b7b3
  • 如何获取Winforms窗体标题栏高度的大小?

    因此 如果它是工具窗口或可最小化的表单 我希望能够以编程方式获取其高度 这可能吗 如果是这样怎么办 您可以使用以下方法确定工具窗口和普通表单的标题栏高度 Rectangle screenRectangle this RectangleToS
  • 如何正确转义mysql?

    我刚刚发现如果我写 select from tbl where name like foo 然后添加 foo 作为参数及其值 a 用户数据 它不会正确转义 我勒个去 它想要 a 即使我使用参数 我还是忍不住觉得我对 sql 注入持开放态度
  • 为什么当要求修剪“PRN.NUL”时,TrimStart 会更多地修剪字符?

    这是代码 namespace TrimTest class Program static void Main string args string ToTrim PRN NUL Console WriteLine ToTrim string
  • 枚举扩展方法

    在vs2008中 是否可以编写适用于任何枚举的扩展方法 我知道您可以针对特定枚举编写扩展方法 但我希望能够使用单个扩展方法对每个枚举进行处理 这可能吗 是的 只需针对基础进行编码Enum类型 例如 public static void So
  • VB.NET 中的静态方法实现

    我很困惑Static在 VB NET 中的实现 在 C 中 我们可以创建静态类和静态方法来为我们的应用程序编写实用方法 现在 VB NET 让我们创建Module代替静态类 如果我们在模块中创建一个方法 默认情况下它会变成静态的 但在我的应
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 如何在 C# 中不使用科学记数法将字符串反序列化为 JObject

    我有一个像这样的字符串 var str data someProperty 0 00001 当我像这样解析它为 JObject 时 var jObject JObject Parse str 我的 jObject 看起来像这样 data s
  • 使用 Excel VBA 控制 Web 浏览器

    我被分配了自动化基于 Web 的任务 针对 HTTPS 网站 的任务 用户当前正在用数据填充Excel工作表 他们现在希望以一种直接控制浏览器并填充数据的方式自动化Excel 我发现 iMacros Scripting 版本作为执行此操作的
  • SwiftUI:带有图像的按钮在真实 iPhone 上有灰色边框,但在模拟模式下工作正常

    我正在尝试制作简单的应用程序 该应用程序似乎在模拟模式下运行良好 但在我的 iPhone 上测试按钮看起来与模拟 iPhone 不同 在这里链接模拟图片 在此输入图像描述 https i stack imgur com PyBDM png
  • 网站图标在 Internet Explorer 中不工作

    我已尽一切努力使 favicon 工作 但仅在 IE 上不起作用 这是在 我尝试使用 favicon co uk 和 favicon generator org 创建一个 favicon 但在 IE 中没有任何效果 它是 16x16 和 i
  • s.Count(Char.IsLetter) 有什么问题

    F let s bugs 42 bunny s Count fun c gt Char IsLetter c s Where fun c gt Char IsLetter c ToArray s Where Char IsLetter To
  • 在 NSURLConnection 中从 Swift 中的completionHandler 中获取数据

    我正在尝试编写一个函数来执行异步 GET 请求 并返回响应 作为任何数据类型 但这里是 NSData 这个问题是基于 如何快速使用 NSURLConnectioncompletionHandler https stackoverflow c
  • ClickOnce如何设置图标

    尝试在 ClickOnce 安装中设置图标的示例 但没有任何进展 在发布 gt 选项 gt 文件关联中设置 application的扩展名并选择我的图标 也许我正在寻找错误的方式来设置图标 但我的 app appref ms 仍然有默认图标
  • 序列化为 JSON 时排除集合中的特定项目

    我试图 挑选 我想要序列化的特定类型集合中的哪些对象 设置示例 public class Person public string Name get set public List
  • GCE使用云存储桶作为挂载驱动器

    有没有办法将存储桶挂载到实例 以便网络服务器可以将其用作存储 如果没有 如何在不添加另一个带有操作系统的永久磁盘的情况下向实例添加更多存储 除了附加新的永久性磁盘之外 您还可以使用许多基于 FUSE 的实用程序将 Google Cloud
  • 如何在提交时重新加载页面

    我有一个包含表单的 Bootstrap Modal 该模式还包含一个提交和取消按钮 取消按钮工作正常 并且正在成功关闭模态框 现在 根据我对模态框提交按钮单击的要求 通过将用户输入传递到 Web 服务 表单已成功提交 但模态框并未关闭 另外
  • AndroidX - 程序类型已存在:androidx.annotation.BoolRes

    我今天尝试使用 Android Studio 中的 重构 gt 迁移到 AndroidX 选项将当前项目迁移到 AndroidX 每当我尝试编译我的应用程序时 我都会收到一个 程序类型已存在 androidx annotation Bool
  • 在设备上将 GIF 转换为 MP4

    是否可以获取远程 但如果需要的话我可以先下载 GIF 序列并在设备上制作 MPMovies PlayerViewController 可播放的 mp4 我尝试过使用http api online convert com http api o
  • MongoDB 相当于 SQL“OR”

    所以 MongoDB在查找记录时默认使用 AND 例如 db users find age gte 30 lte 40 上述查询找到用户 gt 30AND 我如何找到 OR gt 40 岁 没有 OR 运算符 但他们说你仍然可以这样做 ht
  • 添加“constexpr”可以改变行为吗?

    给定两个程序 源代码中唯一的区别是其中一个的存在或不存在constexpr 有没有可能程序的含义发生了变化 换句话说 如果有一个编译器选项要求编译器努力推断constexpr在可能的情况下 它会破坏现有的标准代码和 或以不好的方式改变其含义
  • 在 C# 中对从 1 开始的数组进行变基

    我在 C 中有一个基于 1 的数组 通过调用 Excel Range 的 get Value 生成 例如 我得到一个二维数组 object ExcelData object MySheet UsedRange get Value Excel
  • 使用react-native-firebase在反应本机应用程序中链接器命令失败

    我使用react native firebase库开发了一个react Native应用程序 我想设置我的应用程序图标 所以我使用了这个库 npm install g yo generator rn toolbox from here ht
  • dplyr `left_join()` 不能将字符对象用作 LHS 变量 [重复]

    这个问题在这里已经有答案了 I can使用以下命令连接包含两个不同名称的变量的两个数据集dplyr left join by c name1 name2 我想要使用角色对象加入 left join by c nameOb1 nameOb2
  • 位对齐可提高空间和性能

    在书里游戏编码完成 第三版 https rads stackoverflow com amzn click com 1584506806作者提到了一种减少数据结构大小的技术and提高访问性能 本质上 它依赖于当成员变量内存对齐时获得性能的事
  • MonoGame 示例无法在 Mountain Lion 上编译

    所以我安装了MonoFramework MonoDevelop和MonoMac 并下载了最新版本的MonoGame 我尝试编译示例 但它们都因相同的错误而失败Parsing error of error Unknown platform 问
  • 确定 .NET 程序集是否是从同一源构建的

    有谁知道如何比较两个 NET 程序集以确定它们是否是从 相同 源文件构建的 我知道有一些差异实用程序可用 例如 Reflector 插件 但我对查看 GUI 中的差异不感兴趣 我只是想要一种自动方法来比较二进制文件集合以查看它们是否是从相同