两台计算机上的相同源代码产生不同的可执行行为

时间:2020-03-05 18:59:50  来源:igfitidea点击:

这是场景:

存储在SVN中的CWindows应用程序项目用于创建可执行文件。通常,构建服务器会处理构建过程并定期创建构建,供测试使用。在此特定实例中,系统要求我修改特定的构建并创建可执行文件。

我不能完全确定构建服务器是否修改了项目文件,但是我知道它会在SVN中创建用于编译可执行文件的源代码的标记。使用该标签,我在第二台机器(开发机器)上签出了代码。然后,我在开发机器上编译了源代码。

在执行时,在开发计算机上编译的应用程序的功能与构建服务器所编译的应用程序不完全相同。例如,在测试计算机上,应用程序检测到DateTime Parse执行。但是,构建计算机的可执行文件不会抛出任何异常。如果我在开发计算机上运行可执行文件,则不会引发任何异常。

因此,总而言之,理论上两台机器都使用相同的源代码和项目。

开发计算机的可执行文件仅可在开发计算机上使用。 Build计算机的可执行文件可在包括dev计算机在内的每台计算机上工作。

机器的区域设置或者时区是否存储在已编译的可执行文件中?任何想法可能导致此行为的原因,或者如何检查可执行文件以查找可能的差异并更正它们?

解决方案

回答

不幸的是,我无法使用测试机并在其上添加调试器。我会尽快。

我们可以在调试器下的构建计算机上运行该程序吗?

如果是这样,请调试问题,无需猜测。

回答

让开发计算机上的调试器捕获异常,在构建计算机上的同一位置设置一个断点。看看两者之间有什么不同。

回答

两台机器可能具有不同版本的基础dll,而这些版本不在​​构建过程中。我已经看到了在我们的内部服务器场中分布服务时发生的情况。

回答

该应用程序使用所运行计算机的"区域设置",这似乎是问题。我们可以通过将System.Threading.Thread.CurrentThread.CurrentCulture和System.Threading.Thread.CurrentThread.CurrentUICulture设置为特定值来强制线程使用特定区域性。

回答

我曾经有过类似的问题(在C ++中除外),当我比较编译后的可执行文件的大小时,它们相差甚远。不幸的是,经过几天的搜索,我发现最好的解决方案是卸载VS05并重新安装它。

回答

我已经看到XP上不同的"区域和语言选项"会导致这种现象。它们在两台机器上都匹配吗?开始|设置|控制面板区域和语言选项...

如果我要问的话,为什么仍然要使用构建服务器(对于Ccode)?

回答

我使用Cw时的构建时间几乎不明显(<2s)。该应用程序真的那么大吗?

我有两个问题,两台机器的区域设置是否相同,错误日志在哪里?我希望;-)我们可以处理异常并将其写入磁盘,事件日志..一些有助于解决此类问题的方法。

回答

日期是从哪里解析的?如果它在数据库中,也许我们也有错误的数据。

回答

构建系统可能会发布一个版本,而在开发PC上手动构建一个调试版本。调试版本具有更多错误检查功能。查看是否可以手动构建发行版本,以及是否仍然存在差异。

段落数量不匹配