Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 相同的编译器在不同的操作系统上创建不同的行为_C#_Compiler Construction - Fatal编程技术网

C# 相同的编译器在不同的操作系统上创建不同的行为

C# 相同的编译器在不同的操作系统上创建不同的行为,c#,compiler-construction,C#,Compiler Construction,我们公司的一些人正在为此争论。给定源代码和编译器(使用相同的标志/开关编译),编译器是否可能创建在不同操作系统中具有不同行为的二进制文件 具体地说,我们有一个C#项目,它必须在Windows XP和Windows 7中运行,这两种操作系统都是32位的。编译器是VS2008。有一个解决方案文件(*.sln),其中包含我们用于构建软件的所有必要文件、程序集、项目等 如果代码(相同的解决方案文件)在VS 2008中编译(使用相同的标志/开关,因为它是相同的解决方案文件),XP中是否可能会生成一个与Wi

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

具体地说,我们有一个C#项目,它必须在Windows XP和Windows 7中运行,这两种操作系统都是32位的。编译器是VS2008。有一个解决方案文件(*.sln),其中包含我们用于构建软件的所有必要文件、程序集、项目等

如果代码(相同的解决方案文件)在VS 2008中编译(使用相同的标志/开关,因为它是相同的解决方案文件),XP中是否可能会生成一个与Windows 7中编译的二进制文件有行为差异的二进制文件

我所说的行为差异是指,在特定情况下

  • XP构建将在XP中按预期运行
  • Win 7构建将在Win 7中按预期运行
  • XP版本可能会导致Win7中出现错误(可能是崩溃或某些意外行为),反之亦然
这个项目太大了,不能拿出一个小的测试项目。我想知道当上述情况属实时有哪些情况(如果有的话)。

简单回答:没有

由于不同的情况,应用程序失败的情况更为常见。例如,缺少库、文件、注册表项;拔掉插头的设备

希望你没有做这样奇怪的事情;)


如果在测试机器上安装了相同的VS2008(包括service Pack),并且提供了相同的框架(包括service Pack),那么答案是否定的

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

您还必须考虑到操作系统对应用程序(防火墙、杰普河、UAC等)的不同响应可能会暴露一个操作系统上不存在于另一个操作系统上的应用程序的缺陷。 然后是非托管代码问题,这完全是另一个主题。而且,当我们这样做时,来自应用程序的本机操作系统调用可能会导致不稳定


但这一切都不是因为编译器在开头的句子中给出了约束条件。

简单的答案是否定的。无论机器或操作系统如何,编译器的本质都是基于相同的代码生成相同的程序集


想象一下如果这不是真的会发生什么?您必须拥有具有各种操作系统和各种service pack或其他功能的独立生成计算机。

调用仅存在于Windows 7中的本机API方法。不,一切都取决于编译器(版本、开关等)。它与操作系统或环境无关。@HansPassant;但这就是运行时环境。生成的程序集不会有不同的行为。您的同事错了。:-)你可能会告诉他们,如果他们的理论是正确的,Windows8在发布当天将无法运行任何应用程序!如果他们发现了这种情况,那么他们肯定在编译器中发现了一个bug。然后你手上有一个非常有趣的问题。一定要把它贴在这里,我们的娱乐和代表收益!我们在Windows 7 64位上开发,我们在Windows XP或Windows 7 32位上开发,具体取决于谁是QA,我们在Windows 7 32/64位或Windows XP上开发和部署,具体取决于谁是指定的部署负责人。我们部署到Windows7 32/64位和WindowsXP。从来没有任何行为上的差异。这在.NET中不是问题。为什么代码会根据编译时间产生不同的行为<代码>日期时间。现在不是在编译时嵌入到代码中的常量值,而是在运行时动态读取。@code Gray:重新措辞,不是我的意思:)
if (DateTime.Now.Year != 2012)
   throw new Exception();