4

我们有一些共享程序集,每晚都会自动构建。当源代码没有更改时,我希望程序集二进制文件与以前的版本完全相同。

但是,程序集之间似乎存在细微差别。

我已经做了一些努力来确定两个构建之间的差异。我曾经ildasm生成一个 il 版本,并比较了生成的文本版本。唯一的区别(在 IL 中)是模块中的 MVID(随机 guid)。

一些谷歌搜索告诉我模块版本 ID 是由编译器生成的,因此可以确定构建源,即使其他一切都相同。

此 MVID 在相同代码的构建之间创建人工差异,并人工签入生成的程序集。

是否可以将 MVID 提供给 C# 编译器?

4

2 回答 2

6

ECMA-335 标准说:

MVID 是用于区分同一模块的两个版本的 Guid

根据这个描述,向 C# 编译器提供这是一个参数将破坏它的目的,因为您可以为不同的构建传递相同的 MVID,所​​以我会说不。

我认为更简单的方法是仅在不一定每晚都发生变化时进行构建。

于 2011-04-08T17:06:03.583 回答
3

我意识到这是一个 5 年前的问题,但我制作了一个Fody插件,允许您为程序集指定自定义 MVID(我自己的测试需要)

您可以通过 nuget 获取它:

Install-Package Mvid.Fody

然后,您可以像这样指定自定义 MVID:

[assembly: Mvid("your-guid-string-here")]

当程序集编译时,它将有一个带有您指定的 Guid 的 MVID。

更多信息:https ://github.com/hmemcpy/Mvid.Fody

于 2016-03-11T21:21:13.983 回答