我作为C#开发人员度过了我的职业生涯.作为一名学生,我偶尔使用C但没有深入研究它的编译模型.最近我跳上了潮流,开始研究Objective-C.我的第一步只让我意识到我先前存在的知识中的漏洞.
根据我的研究,C/C++/ObjC编译需要预先声明所有遇到的符号.我也理解建筑是一个两步的过程.首先,将每个单独的源文件编译为单个目标文件.这些目标文件可能具有未定义的"符号"(通常对应于头文件中声明的标识符).其次,将目标文件链接在一起以形成最终输出.这是一个非常高级的解释,但它足以满足我的好奇心.但是我也希望对C#构建过程有类似的高级理解.
问: C#构建过程如何解决头文件的需求?我想也许编译步骤可以进行两遍?
(编辑:此处跟进问题)在使用库时C/C++/Objective-C与C#的比较如何?)
我们有一些共享程序集,每晚都会自动构建.如果没有对源进行任何更改,我希望程序集二进制文件与先前版本完全相同.
但是,程序集之间似乎存在细微差别.
我已经做了一些努力来确定两个版本之间的区别.我曾经ildasm生成过il版本,并比较了生成的文本版本.唯一的区别(在IL中)是模块中的MVID(随机guid).
一些谷歌搜索告诉我模块版本ID由编译器生成,因此可以确定构建源,即使其他所有内容都相同.
此MVID在相同代码的构建之间创建人工差异,并对所得到的程序集进行人工检查.
是否可以将MVID提供给C#编译器?