我可以在构建.net程序集时指定模块版本ID(MVID)吗?

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

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

我已经做了一些努力来确定两个版本之间的区别。 我使用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")] 

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

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