1

这是场景:

存储在 SVN 中的 AC# Windows 应用程序项目用于创建可执行文件。通常,构建服务器处理构建过程并定期创建用于测试的构建。在这个特定的例子中,我被要求修改一个特定的构建并创建可执行文件。

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

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

所以总而言之,两台机器理论上都使用相同的源代码和项目。
开发机器的可执行文件只能在开发机器上运行。Build 机器的可执行文件适用于每台机器,包括开发机器。

机器的区域设置或时区是否存储在编译的可执行文件中?知道什么可能导致这种行为或如何检查可执行文件以找到可能的差异并纠正它们吗?

不幸的是,我不能拿一台测试机并附加一个调试器。我会尽快。

4

9 回答 9

4

该应用程序使用运行它的机器的区域设置,看起来这是您的问题。您可以通过将 System.Threading.Thread.CurrentThread.CurrentCulture 和 System.Threading.Thread.CurrentThread.CurrentUICulture 设置为特定值来强制线程使用特定区域性。

于 2008-09-17T19:59:34.717 回答
2

两台机器可能具有不同版本的底层 dll,这不是构建过程的一部分。在我们的内部服务器场分发服务时,我已经看到了这种情况。

于 2008-09-17T19:59:29.693 回答
1

您可以在调试器下在构建机器上运行程序吗?

如果是这样,那么调试问题 -无需猜测

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

于 2008-09-17T19:58:39.087 回答
1

我在 XP 上看到不同的“区域和语言选项”会导致这种行为。这些在两台机器上匹配吗?开始 | 设置 | 控制面板 | 区域和语言选项...

于 2008-09-17T20:01:17.677 回答
1

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

正在解析的日期来自哪里?如果它在您的数据库中,则可能您也有错误的数据。

于 2008-09-17T20:03:19.463 回答
0

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

于 2008-09-17T19:59:40.940 回答
0

如果我可能会问,您为什么要使用构建服务器来获取 C# 代码?

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

于 2008-09-17T20:03:14.270 回答
0

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

于 2008-09-17T21:22:35.203 回答
0

如果每个人都在不同的计算机上构建相同的程序,则很少有相同的源代码。您应该始终假设程序是不同的,永远不要期望它们是相同的。在像 linux 这样具有良好包管理器和定期或随机更新的环境中,永远不要期望相同的源代码在同一台计算机上构建相同的程序。语言越高越差。为调试器构建程序与为发布而构建程序截然不同。即使没有调试器,调试器版本也会隐藏在您进入发布版本之前您不会发现的错误。如果您过于依赖调试器环境,您基本上可以调试程序两次。

于 2008-09-19T00:49:54.027 回答