相同的编译器在不同的OS上创建不同的行

Don*_*alo 0 c# compiler-construction

我公司的一些人正在争论它.给定源代码和编译器(使用相同的标志/开关编译),编译器是否可能创建在不同操作系统中具有不同行为的二进制文件?

具体来说,我们有一个必须在Windows XP和Windows 7中运行的C#项目,都是32位.编译器是VS 2008.有一个解决方案文件(*.sln),它包含我们用来构建软件的所有必要文件,程序集,项目等.

是否有可能如果代码(相同的解决方案文件)在VS 2008中编译(具有相同的标志/开关,因为它是相同的解决方案文件)在XP中将生成一个二进制文件,其行为不同于 Windows中的编译二进制文件7?

根据行为差异我的意思是,在特定情况下......

  • XP版本将在XP中按预期运行
  • Win 7版本将在Win 7中按预期运行
  • XP版本可能会在Win 7中导致错误(可能是崩溃或某些意外行为),反之亦然

该项目太庞大,无法提出一个小测试项目.我想知道上述情况是什么情况(如果有的话).

com*_*ech 5

给定VS2008的相同安装(包括服务包),并在测试机器上给出相同的框架(包括服务包),答案是否定的.

但是,这并不意味着应用程序执行的任务不会在不同的操作系统上表现不同.

您还必须考虑操作系统对应用程序的不同响应(防火墙,DEP,UAC等)可能会在一个操作系统上暴露应用程序中的缺陷,而这些缺陷不存在于另一个操作系统上.

然后是非托管代码问题,这是另一个主题.而且,虽然我们正在使用它,但是来自您应用的本机操作系统调用可能会导致不稳定.

但这一切都不是由于编译器给出了开头句子中的约束.