oɔɯ*_*ɯǝɹ 4 .net c# diff assemblies binary-reproducibility
我们有一些共享程序集,每晚都会自动构建.如果没有对源进行任何更改,我希望程序集二进制文件与先前版本完全相同.
但是,程序集之间似乎存在细微差别.
我已经做了一些努力来确定两个版本之间的区别.我曾经ildasm生成过il版本,并比较了生成的文本版本.唯一的区别(在IL中)是模块中的MVID(随机guid).
一些谷歌搜索告诉我模块版本ID由编译器生成,因此可以确定构建源,即使其他所有内容都相同.
此MVID在相同代码的构建之间创建人工差异,并对所得到的程序集进行人工检查.
是否可以将MVID提供给C#编译器?
ECMA-335标准说:
MVID是用于区分同一模块的两个版本的Guid
根据这个描述,提供这个是C#编译器的一个参数将击败它的目的,因为你可以为不同的构建传递相同的MVID所以我会说不.
我认为更简单的方法是只在每天晚上不一定发生变化时进行构建.
我意识到这是一个 5 年前的问题,但我制作了一个Fody插件,允许您为程序集指定自定义 MVID(我自己的测试需要)
您可以通过 nuget 获取它:
Install-Package Mvid.Fody
然后您可以指定一个自定义 MVID,如下所示:
[assembly: Mvid("your-guid-string-here")]
Run Code Online (Sandbox Code Playgroud)
当程序集编译时,它将具有一个带有您指定的 Guid 的 MVID。
更多信息请参见: https: //github.com/hmemcpy/Mvid.Fody
| 归档时间: |
|
| 查看次数: |
3755 次 |
| 最近记录: |