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

发布于 2024-10-30 23:20:46 字数 320 浏览 4 评论 0原文

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

然而,程序集之间似乎存在细微差别。

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

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

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

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

We have some shared assemblies that get build automatically every night. When there are no changes made to the sources, i would expect the assembly binaries to be exactly the same as a previous version.

However, there seem to be minor differences between assemblies.

I have done some effort to determine the difference between two builds. I used ildasm to generate an il version, and compared the resulting text versions. The only difference (in IL) is the MVID (a random guid) in the module.

Some googling tells me that the module version id gets generated by the compiler, so it is possible to determine the build source, even when everything else is the same.

This MVID creates an artificial diff betweeen builds of the same code, and an artificial checkin of the resulting assembly.

Is it possible to supply the MVID to the C# compiler?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

年华零落成诗 2024-11-06 23:20:46

ECMA-335 标准规定:

MVID是一个Guid,用来区分
同一版本的两个版本之间
模块

基于这个描述,向 C# 编译器提供这个参数将会违背它的目的,因为你可以为不同的构建传递相同的 MVID,所​​以我会说不。

认为更简单的方法是仅在某些情况发生变化时才构建,而不是每次都发生变化夜晚。

The ECMA-335 standard says:

The MVID is a Guid used to distinguish
between two versions of the same
module

Based on this description, supplying this is an argument to C# compiler will defeat it's purpose since you can pass the same MVID for different builds so I would say No.

I think the easier way would be to build only when something changes not necessarily every night.

不羁少年 2024-11-06 23:20:46

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

您可以通过 nuget 获取它:

Install-Package Mvid.Fody

然后您可以指定一个自定义 MVID,如下所示:

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

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

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

I realize this is a 5 year old question, but I made a Fody addin that allows you to specify a custom MVID for an assembly (needed for my own tests)

You can get it via nuget:

Install-Package Mvid.Fody

You can then specify a custom MVID like this:

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

When the assembly compiles, it will have an MVID with the Guid you specified.

More info here: https://github.com/hmemcpy/Mvid.Fody

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文