1

到目前为止,我从 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
4

1 回答 1

0

我猜你所说的“二进制兼容”意味着你的文件并不完全相同,并不是说它们不会以相同的方式执行,具体取决于你调用编译器的方式。

编译器 (Csc.exe) 会在每个编译文件中添加时间戳和其他一些内容,因此即使源未更改,从两个不同编译生成的文件也不会完全匹配。SO上有一个关于它的线程,解释了一点,为什么C#为相同的源代码生成不同的EXE?,但我也在 MSDN 上阅读了一篇很好的博客文章,其中谈到了这一点,但我现在似乎找不到它。

于 2012-10-22T19:14:13.490 回答