为什么vcbuild-和Visual Studio编译的文件二进制文件根本不相似?

时间:2012-10-22 18:06:56

标签: c# compilation csc vcbuild binary-reproducibility

到目前为止,我从VS编译了我的项目,现在我将编译过程移到了脚本中。 为此,我将vcbuild.exe与命令行参数一起使用。 我看到的是我的输出文件根本不是字节相似的。 我比较了来自VS和我的脚本的命令行,它与最后一个逗号相同,所以我真的不明白为什么它会如此不同。

VS编译和vcbuild日志相同的命令行(为清晰起见添加了换行符):

c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Csc.exe
    /noconfig
    /unsafe-
    /nowarn:1701,1702
    /platform:x86
    /errorreport:prompt
    /define:TRACE
    /reference:C:\blahblah.dll
    /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll
    /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll
    /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll
    /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll
    /debug:pdbonly
    /optimize+
    /out:obj\x86\Release\blah.exe
    /target:winexe
    /win32icon:blah.ico
    ..\..\blah\version.cs
    Program.cs
    Properties\AssemblyInfo.cs

1 个答案:

答案 0 :(得分:0)

我猜你通过“二进制兼容”意味着你的文件不完全相同,而不是它们不会以相同的方式执行,这取决于你如何调用编译器。

编译器(Csc.exe)在每个编译文件中添加时间戳和其他一些内容,因此即使源未更改,从两个不同编译生成的文件也不会完全匹配。在这里有一个关于它的帖子,它解释了一下,Why does C# generate different EXEs for the same source-code?,但我也在MSDN上阅读了一篇很好的博客文章,谈到了这个,但我现在似乎无法找到它。 / p>