修复︰ 在计算机上正在运行的.NET Framework 3.5 Service Pack 1,JIT 编译器和 Mscorjit.dll 文件使用本机映像生成器 (Ngen.exe) 可能会生成不正确的代码

症状

在计算机上运行 Microsoft.NET Framework 3.5 Service Pack 1 (SP1),则在实时 (JIT) 编译器和 Mscorjit.dll 文件使用本机映像生成器 (Ngen.exe) 可能会生成不正确的代码。因此,32 位托管 c + + 应用程序可能会产生不正确的结果。

如果以下条件为 true,将出现此问题:

  • 该结构或类的源代码中有少于四个标量类型和任何托管的对象的引用。

  • 使用 Cpblk 指令或紧接指令。

注意:在 64 位应用程序中不会出现此问题。

原因

出现此问题是由于.NET Framework 3.5 SP1 中回归。

解决方案

修补程序信息

可以从 Microsoft 获得受支持的修复程序。然而,此修补程序仅用于解决本文中描述的问题。仅对出现这一特定问题的系统应用此修补程序。此修补程序可能会接受进一步的测试。因此,如果这个问题没有对您造成严重的影响,我们建议您等待包含此修复程序的下一个软件更新。

若要从 MSDN 代码库中下载此修补程序,请访问下面的 Microsoft Web 站点:

http://code.msdn.microsoft.com/KB957542
注意:MSDN 代码库显示获取此修复程序的语言。如果看不到列出的语言,这是因为代码库的资源页不可用这种语言。


注意:如果出现其他问题或需要任何故障诊断时,您可能需要创建单独的服务请求。对于不符合此特定的修补程序的其他支持问题和事项将照常收取费用。有关 Microsoft 客户服务和支持电话号码或创建单独的服务请求的完整列表,请访问下面的 Microsoft 网站︰

http://support.microsoft.com/contactus/?ws=support注意:如果您有在 64 位平台运行的 32 位应用程序时,应用的 64 位版本,若要解决此问题的修补程序。

系统必备组件

您必须具有要应用此修补程序的安装.NET Framework 3.5 SP1。

重启要求

您可能需要重新启动计算机,如果任何更新的文件正在使用。

修补程序替换信息

此修补程序不替换任何其他修补程序。

文件信息

此修复程序的英文版具有的文件属性 (或更新的文件属性)在下表中列出。日期和为这些文件的时间以协调世界时 (UTC) 列出。当您查看文件信息时,它将转换为本地时间。要了解 UTC 与本地时间之间的时差,请使用控制面板中的日期和时间项中的时区选项卡。

Windows 2000、 Windows XP 和 Windows Server 2003,x86 版本

文件名称

文件版本

文件大小

日期

时间

Mscordacwks.dll

2.0.50727.3068

992,264

16-Sep-2008

13:13

Mscorjit.dll

2.0.50727.3068

367,104

16-Sep-2008

13:13

Mscorlib.dll

2.0.50727.3068

4,546,560

16-Sep-2008

13:13

Mscorwks.dll

2.0.50727.3068

5,815,808

16-Sep-2008

13:13

Windows 2000、 Windows XP 和 Windows Server 2003,x64 版本

文件名称

文件版本

文件大小

日期

时间

平台

Mscordacwks.dll

2.0.50727.3068

992,264

16-Sep-2008

13:13

x86

Mscorjit.dll

2.0.50727.3068

367,104

16-Sep-2008

13:13

x86

Mscorlib.dll

2.0.50727.3068

4,546,560

16-Sep-2008

13:13

x86

Mscorwks.dll

2.0.50727.3068

5,815,808

16-Sep-2008

13:13

x86

Mscordacwks.dll

2.0.50727.3068

1,767,944

16-Sep-2008

10:33

x64

Mscorjit.dll

2.0.50727.3068

1,580,032

16-Sep-2008

10:33

x64

Mscorlib.dll

2.0.50727.3068

4,562,944

16-Sep-2008

10:33

x64

Mscorwks.dll

2.0.50727.3068

10,079,744

16-Sep-2008

10:33

x64

Windows 2000、 Windows XP 和 Windows Server 2003,IA-64 版本

文件名称

文件版本

文件大小

日期

时间

平台

Mscordacwks.dll

2.0.50727.3068

992,264

16-Sep-2008

13:13

x86

Mscorjit.dll

2.0.50727.3068

367,104

16-Sep-2008

13:13

x86

Mscorlib.dll

2.0.50727.3068

4,546,560

16-Sep-2008

13:13

x86

Mscorwks.dll

2.0.50727.3068

5,815,808

16-Sep-2008

13:13

x86

Mscordacwks.dll

2.0.50727.3068

3,087,880

16-Sep-2008

10:44

IA-64

Mscorjit.dll

2.0.50727.3068

2,560,512

16-Sep-2008

10:44

IA-64

Mscorlib.dll

2.0.50727.3068

4,005,888

16-Sep-2008

10:44

IA-64

Mscorwks.dll

2.0.50727.3068

20,153,856

16-Sep-2008

10:44

IA-64

Windows Vista Service Pack 1 (SP1) 和 Windows Server 2008 中,x86 版本

文件名称

文件版本

文件大小

日期

时间

平台

Mscorlib.resources.dll

2.0.50727.3053

352,256

15-Sep-2008

22:25

x86

Mscorlib.resources.dll

2.0.50727.3053

303,104

15-Sep-2008

22:25

x86

Mscorlib.resources.dll

2.0.50727.3053

299,008

15-Sep-2008

22:25

x86

Mscorlib.resources.dll

2.0.50727.3053

315,392

27-Jul-2008

17:58

x86

Mscorlib.resources.dll

2.0.50727.3053

425,984

15-Sep-2008

22:25

x86

Mscorlib.resources.dll

2.0.50727.3053

307,200

27-Jul-2008

17:58

x86

Mscorlib.resources.dll

2.0.50727.3053

299,008

15-Sep-2008

22:25

x86

Mscorlib.resources.dll

2.0.50727.3053

311,296

27-Jul-2008

17:58

x86

Mscorlib.resources.dll

2.0.50727.3053

331,776

15-Sep-2008

22:25

x86

Mscorlib.resources.dll

2.0.50727.3053

315,392

15-Sep-2008

22:25

x86

Mscorlib.resources.dll

2.0.50727.3053

307,200

27-Jul-2008

17:55

x86

Mscorlib.resources.dll

2.0.50727.3053

348,160

27-Jul-2008

17:58

x86

Mscorlib.resources.dll

2.0.50727.3053

319,488

27-Jul-2008

17:55

x86

Mscorlib.resources.dll

2.0.50727.3053

290,816

15-Sep-2008

22:25

x86

Mscorlib.resources.dll

2.0.50727.3053

303,104

15-Sep-2008

22:25

x86

Mscorlib.resources.dll

2.0.50727.3053

311,296

15-Sep-2008

22:25

x86

Mscorlib.resources.dll

2.0.50727.3053

303,104

27-Jul-2008

17:55

x86

Mscorlib.resources.dll

2.0.50727.3053

307,200

15-Sep-2008

22:25

x86

Mscorlib.resources.dll

2.0.50727.1434

397,312

11-Jan-2008

22:59

x86

Mscorlib.resources.dll

2.0.50727.3053

299,008

15-Sep-2008

22:25

x86

Mscorlib.resources.dll

2.0.50727.3053

299,008

15-Sep-2008

22:25

x86

Mscorlib.resources.dll

2.0.50727.3053

278,528

27-Jul-2008

17:55

x86

Mscorlib.resources.dll

2.0.50727.3053

278,528

27-Jul-2008

17:55

x86

Big5.nlp

不适用

66,728

18-Dec-2007

21:03

不适用

Bopomofo.nlp

不适用

82,172

18-Dec-2007

21:03

不适用

Ksc.nlp

不适用

116,756

18-Dec-2007

21:04

不适用

Mscorlib.dll

2.0.50727.3068

4,546,560

01-Oct-2008

22:27

x86

Normidna.nlp

不适用

59,342

18-Dec-2007

21:05

不适用

Normnfc.nlp

不适用

45,794

18-Dec-2007

21:05

不适用

Normnfd.nlp

不适用

39,284

18-Dec-2007

21:05

不适用

Normnfkc.nlp

不适用

66,384

18-Dec-2007

21:05

不适用

Normnfkd.nlp

不适用

60,294

18-Dec-2007

21:05

不适用

Prc.nlp

不适用

83,748

18-Dec-2007

21:05

不适用

Prcp.nlp

不适用

83,748

18-Dec-2007

21:05

不适用

Sortkey.nlp

不适用

262,148

18-Dec-2007

21:05

不适用

Sorttbls.nlp

不适用

20,320

18-Dec-2007

21:05

不适用

Xjis.nlp

不适用

28,288

18-Dec-2007

21:05

不适用

Mscordacwks.dll

2.0.50727.3068

992,264

01-Oct-2008

22:27

x86

Mscorjit.dll

2.0.50727.3068

367,104

24-Sep-2008

22:21

x86

Mscorwks.dll

2.0.50727.3068

5,815,808

01-Oct-2008

22:27

x86

Windows Vista SP1 和 Windows Server 2008 中,x64 版本

文件名称

文件版本

文件大小

日期

时间

平台

Big5.nlp

不适用

66,728

18-Dec-2007

21:01

不适用

Bopomofo.nlp

不适用

82,172

18-Dec-2007

21:01

不适用

Ksc.nlp

不适用

116,756

18-Dec-2007

21:02

不适用

Mscorlib.dll

2.0.50727.3068

4,562,944

01-Oct-2008

22:25

x64

Normidna.nlp

不适用

59,342

18-Dec-2007

21:03

不适用

Normnfc.nlp

不适用

45,794

18-Dec-2007

21:03

不适用

Normnfd.nlp

不适用

39,284

18-Dec-2007

21:03

不适用

Normnfkc.nlp

不适用

66,384

18-Dec-2007

21:03

不适用

Normnfkd.nlp

不适用

60,294

18-Dec-2007

21:03

不适用

Prc.nlp

不适用

83,748

18-Dec-2007

21:03

不适用

Prcp.nlp

不适用

83,748

18-Dec-2007

21:03

不适用

Sortkey.nlp

不适用

262,148

18-Dec-2007

21:03

不适用

Sorttbls.nlp

不适用

20,320

18-Dec-2007

21:03

不适用

Xjis.nlp

不适用

28,288

18-Dec-2007

21:03

不适用

Mscordacwks.dll

2.0.50727.3068

1,767,944

01-Oct-2008

22:25

x64

Mscorjit.dll

2.0.50727.3068

1,580,032

24-Sep-2008

23:06

x64

Mscorwks.dll

2.0.50727.3068

10,079,744

01-Oct-2008

22:25

x64

Mscorlib.resources.dll

2.0.50727.3053

352,256

15-Sep-2008

22:26

x86

Mscorlib.resources.dll

2.0.50727.3053

303,104

15-Sep-2008

22:25

x86

Mscorlib.resources.dll

2.0.50727.3053

299,008

15-Sep-2008

22:26

x86

Mscorlib.resources.dll

2.0.50727.3053

315,392

27-Jul-2008

18:02

x86

Mscorlib.resources.dll

2.0.50727.3053

425,984

15-Sep-2008

22:26

x86

Mscorlib.resources.dll

2.0.50727.3053

307,200

27-Jul-2008

18:02

x86

Mscorlib.resources.dll

2.0.50727.3053

299,008

15-Sep-2008

22:26

x86

Mscorlib.resources.dll

2.0.50727.3053

311,296

27-Jul-2008

18:02

x86

Mscorlib.resources.dll

2.0.50727.3053

331,776

15-Sep-2008

22:26

x86

Mscorlib.resources.dll

2.0.50727.3053

315,392

15-Sep-2008

22:25

x86

Mscorlib.resources.dll

2.0.50727.3053

307,200

27-Jul-2008

17:56

x86

Mscorlib.resources.dll

2.0.50727.3053

348,160

27-Jul-2008

18:02

x86

Mscorlib.resources.dll

2.0.50727.3053

319,488

27-Jul-2008

17:56

x86

Mscorlib.resources.dll

2.0.50727.3053

290,816

15-Sep-2008

22:26

x86

Mscorlib.resources.dll

2.0.50727.3053

303,104

15-Sep-2008

22:25

x86

Mscorlib.resources.dll

2.0.50727.3053

311,296

15-Sep-2008

22:25

x86

Mscorlib.resources.dll

2.0.50727.3053

303,104

27-Jul-2008

17:56

x86

Mscorlib.resources.dll

2.0.50727.3053

307,200

15-Sep-2008

22:25

x86

Mscorlib.resources.dll

2.0.50727.1434

397,312

11-Jan-2008

22:59

x86

Mscorlib.resources.dll

2.0.50727.3053

299,008

15-Sep-2008

22:25

x86

Mscorlib.resources.dll

2.0.50727.3053

299,008

15-Sep-2008

22:25

x86

Mscorlib.resources.dll

2.0.50727.3053

278,528

27-Jul-2008

17:56

x86

Mscorlib.resources.dll

2.0.50727.3053

278,528

27-Jul-2008

17:56

x86

Big5.nlp

不适用

66,728

18-Dec-2007

21:03

不适用

Bopomofo.nlp

不适用

82,172

18-Dec-2007

21:03

不适用

Ksc.nlp

不适用

116,756

18-Dec-2007

21:04

不适用

Mscorlib.dll

2.0.50727.3068

4,546,560

01-Oct-2008

22:27

x86

Normidna.nlp

不适用

59,342

18-Dec-2007

21:05

不适用

Normnfc.nlp

不适用

45,794

18-Dec-2007

21:05

不适用

Normnfd.nlp

不适用

39,284

18-Dec-2007

21:05

不适用

Normnfkc.nlp

不适用

66,384

18-Dec-2007

21:05

不适用

Normnfkd.nlp

不适用

60,294

18-Dec-2007

21:05

不适用

Prc.nlp

不适用

83,748

18-Dec-2007

21:05

不适用

Prcp.nlp

不适用

83,748

18-Dec-2007

21:05

不适用

Sortkey.nlp

不适用

262,148

18-Dec-2007

21:05

不适用

Sorttbls.nlp

不适用

20,320

18-Dec-2007

21:05

不适用

Xjis.nlp

不适用

28,288

18-Dec-2007

21:05

不适用

Mscordacwks.dll

2.0.50727.3068

992,264

01-Oct-2008

22:27

x86

Mscorjit.dll

2.0.50727.3068

367,104

24-Sep-2008

22:21

x86

Mscorwks.dll

2.0.50727.3068

5,815,808

01-Oct-2008

22:27

x86

Windows Vista SP1 和 Windows Server 2008 中,IA-64 版本

文件名称

文件版本

文件大小

日期

时间

平台

Big5.nlp

不适用

66,728

18-Dec-2007

21:06

不适用

Bopomofo.nlp

不适用

82,172

18-Dec-2007

21:06

不适用

Ksc.nlp

不适用

116,756

18-Dec-2007

21:06

不适用

Mscorlib.dll

2.0.50727.3068

4,005,888

01-Oct-2008

22:26

IA-64

Normidna.nlp

不适用

59,342

18-Dec-2007

21:08

不适用

Normnfc.nlp

不适用

45,794

18-Dec-2007

21:08

不适用

Normnfd.nlp

不适用

39,284

18-Dec-2007

21:08

不适用

Normnfkc.nlp

不适用

66,384

18-Dec-2007

21:08

不适用

Normnfkd.nlp

不适用

60,294

18-Dec-2007

21:08

不适用

Prc.nlp

不适用

83,748

18-Dec-2007

21:08

不适用

Prcp.nlp

不适用

83,748

18-Dec-2007

21:08

不适用

Sortkey.nlp

不适用

262,148

18-Dec-2007

21:08

不适用

Sorttbls.nlp

不适用

20,320

18-Dec-2007

21:08

不适用

Xjis.nlp

不适用

28,288

18-Dec-2007

21:08

不适用

Mscordacwks.dll

2.0.50727.3068

3,087,880

01-Oct-2008

22:26

IA-64

Mscorjit.dll

2.0.50727.3068

2,560,512

24-Sep-2008

23:14

IA-64

Mscorwks.dll

2.0.50727.3068

20,153,856

01-Oct-2008

22:26

IA-64

Mscorlib.resources.dll

2.0.50727.3053

315,392

27-Jul-2008

17:58

x86

Mscorlib.resources.dll

2.0.50727.3053

311,296

27-Jul-2008

17:58

x86

Mscorlib.resources.dll

2.0.50727.3053

348,160

27-Jul-2008

17:58

x86

Mscorlib.resources.dll

2.0.50727.3053

319,488

27-Jul-2008

17:58

x86

Mscorlib.resources.dll

2.0.50727.3053

278,528

27-Jul-2008

17:58

x86

Mscorlib.resources.dll

2.0.50727.3053

278,528

27-Jul-2008

17:59

x86

Big5.nlp

不适用

66,728

18-Dec-2007

21:03

不适用

Bopomofo.nlp

不适用

82,172

18-Dec-2007

21:03

不适用

Ksc.nlp

不适用

116,756

18-Dec-2007

21:04

不适用

Mscorlib.dll

2.0.50727.3068

4,546,560

01-Oct-2008

22:27

x86

Normidna.nlp

不适用

59,342

18-Dec-2007

21:05

不适用

Normnfc.nlp

不适用

45,794

18-Dec-2007

21:05

不适用

Normnfd.nlp

不适用

39,284

18-Dec-2007

21:05

不适用

Normnfkc.nlp

不适用

66,384

18-Dec-2007

21:05

不适用

Normnfkd.nlp

不适用

60,294

18-Dec-2007

21:05

不适用

Prc.nlp

不适用

83,748

18-Dec-2007

21:05

不适用

Prcp.nlp

不适用

83,748

18-Dec-2007

21:05

不适用

Sortkey.nlp

不适用

262,148

18-Dec-2007

21:05

不适用

Sorttbls.nlp

不适用

20,320

18-Dec-2007

21:05

不适用

Xjis.nlp

不适用

28,288

18-Dec-2007

21:05

不适用

Mscordacwks.dll

2.0.50727.3068

992,264

01-Oct-2008

22:27

x86

Mscorjit.dll

2.0.50727.3068

367,104

24-Sep-2008

22:21

x86

Mscorwks.dll

2.0.50727.3068

5,815,808

01-Oct-2008

22:27

x86

解决方法

若要变通解决此问题,请使用下列方法之一:

方法 1

应用程序代码类似于"更多信息"一节中的示例代码,如果找到下面的代码行。

#define GETVECTOR3D(vec3d) (*reinterpret_cast<AcGeVector3d*>(&((vec3d).m_x))

更改此代码行,如下所示。

#define GETVECTOR3D(vec3d) (*reinterpret_cast<AcGeVector3d*>(&((vec3d)))

方法 2

将部署.ini 文件。若要执行此操作,创建包含以下代码的文件。

[.NET Framework Debugging Control]AllowOptimize=0

有问题的模块中,相同名称的.ini 文件,但使用.ini 扩展名,而不是.dll 扩展名。例如,"详细信息"部分中的示例代码,命名的.ini 文件的 Bug.ini 文件。将 Bug.ini 文件放在 Bug.dll 文件所在的目录。

注意:此方法的缺点是任何优化为潜在的性能影响。如果使用本机映像生成器 (Ngen.exe) 预编译模块时,此方法不适用。

方法 3

通过使用MethodImplAttribute类到有问题的方法中有选择地应用MethodImplOptions枚举的NoOptimization选项。

注意:此方法禁用 JIT 编译器和本机映像生成器 (Ngen.exe) 在每个方法级别上的优化。性能的影响程度各不相同,取决于方法。

状态

Microsoft 已经确认这是“适用于”一节中列出的 Microsoft 产品中的问题。

详细信息

重现问题的步骤

  1. 创建一个基于.NET Framework 3.5 SP1 的 c + + 应用程序。

  2. 将一个.cpp 文件添加到项目,此文件命名为 Bug.cpp 的文件中,然后将下面的代码粘贴在 Bug.cpp 文件中。

    #using <mscorlib.dll>#include <stdlib.h>
    class AcGeVector3d
    {
    double x, y, z;
    public:
    __forceinline AcGeVector3d(const AcGeVector3d& src): x(src.x),y(src.y),z(src.z)
    {
    }
    __forceinline AcGeVector3d(double xx, double yy, double zz) : x(xx),y(yy),z(zz)
    {
    }
    __forceinline AcGeVector3d operator / (double val) const
    {
    return AcGeVector3d (x/val, y/val, z/val);
    }
    };
    #define GETVECTOR3D(vec3d) (*reinterpret_cast<AcGeVector3d*>(&((vec3d).m_x)))
    namespace Geometry
    {
    [System::Runtime::InteropServices::StructLayout(System::Runtime::InteropServices::LayoutKind::Sequential)]
    public value class Vector3d
    {
    internal:
    double m_x, m_y, m_z;
    Vector3d(const AcGeVector3d* obj)
    {
    GETVECTOR3D(*this) = *obj;
    }
    public:
    Vector3d(double x, double y, double z):m_x(x),m_y(y), m_z(z) {}
    Vector3d DivideBy(double value)
    {
    return Vector3d(&GETVECTOR3D(*this).operator /(value));
    }
    virtual System::String^ ToString() override
    {
    return System::String::Format("{0}, {1}, {2}", m_x, m_y, m_z);
    }
    };
    }

  3. 若要编译的 Bug.cpp 文件,请运行以下命令︰

    cl /clr /GL /O2 bug.cpp /link /dll /out:bug.dll

  4. 创建一个新 Microsoft Visual C# 项目将用作客户端项目。

  5. 命名的 Test.cs 文件,代码文件,然后将下面的代码粘贴在 Test.cs 文件中。

    using Geometry;namespace Test
    {
    class Tester
    {
    static void Main()
    {
    Vector3d v = new Vector3d(200, 200, 0);
    v = v.DivideBy(150);
    System.Console.WriteLine("{0}", v);
    }
    }
    }

  6. 若要编译的 Test.cs 文件,请运行以下命令︰

    csc /r:bug.dll test.cs

  7. 若要将清单嵌入到 Test.exe 文件中,运行以下命令︰

    mt.exe nologo-清单 bug.dll.manifest-outputresource:test.exe;1

  8. 运行 Test.exe 文件。

请注意,实际结果是,如下所示︰

1.33333333333333,1.333333333333 0但是,预期的结果是,如下所示︰

1.33333333333333,0 0

参考资料

有关软件更新术语的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

用于描述 Microsoft 软件更新的标准术语的824684说明

需要更多帮助?

扩展你的技能
了解培训
抢先获得新功能
加入 Microsoft 内部人员

此信息是否有帮助?

谢谢您的反馈意见!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×