修正︰ 在電腦上正在執行.NET Framework 3.5 Service Pack 1,JIT 編譯器,原生映像產生器 (Ngen.exe) 使用 Mscorjit.dll 檔案的檔案可能會產生不正確的程式碼

狀況

在電腦上正在執行 Microsoft.NET Framework 3.5 Service Pack 1 (SP1),只是時間的 (JIT) 編譯器,原生映像產生器 (Ngen.exe) 使用 Mscorjit.dll 檔案的檔案可能會產生不正確的程式碼。因此,32 位元的 Managed c + + 應用程式可能會產生不正確的結果。

如果下列情況成立,就會發生這個問題︰

  • 結構或類別在原始程式碼中的具有少於四個純量種類且沒有 managed 的物件參考。

  • 您可以使用 Cpblk 指令或 Initblk 指令。

注意在 64 位元應用程式不會發生這個問題。

原因

之所以發生這個問題,是因為.NET Framework 3.5 SP1 中的迴歸。

解決方案

Hotfix 資訊

支援的 hotfix 可從 Microsoft 取得。不過,此 Hotfix 僅用於修正本文中所述的問題。此 Hotfix 只適用於發生此特定問題的系統上。此 hotfix 可能會接受其他測試。因此,如果此問題的影響不會很嚴重,我們建議您等候含此 hotfix 的下一版軟體更新。

若要下載此 hotfix,從 MSDN 程式碼庫,請造訪下列 Microsoft 網站︰

http://code.msdn.microsoft.com/KB957542
注意MSDN 程式碼庫顯示 hotfix 是可用的語言。如果看不到您所使用的語言,它是因為代碼庫資源頁面未提供該語言的支援。


注意如果發生其他問題,或如果需要進行疑難排解,您可能必須建立個別的服務要求。收取支援費用會套用到其他支援問題和此特定 hotfix 無法解決的問題。如 Microsoft 客戶服務及支援的電話號碼或建立個別的服務要求的完整清單,請造訪下列 Microsoft 網站︰

http://support.microsoft.com/contactus/?ws=support注意如果您在 64 位元平台執行 32 位元應用程式,請套用 [64 位元版本,如果要解決這個問題的 hotfix。

先決條件

您必須套用此 hotfix 之後所安裝的.NET Framework 3.5 SP1。

重新啟動需求

您可能必須重新啟動電腦,如果正在使用中的任何更新的檔案。

Hotfix 取代資訊

此 hotfix 不會取代任何其他 hotfix。

檔案資訊

此 hotfix 的英文版具有下列表格中所列檔案屬性 (或較新的檔案屬性)。這些檔案的日期和時間會以國際標準時間 (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

選擇性地套用NoOptimization選項的MethodImplOptions列舉型別到有問題的方法使用MethodImplAttribute類別。

注意這個方法會停用 JIT 編譯器,原生映像產生器 (Ngen.exe) 上每個方法層級的最佳化。效能受到影響的程度而異,視方法而定。

狀態

Microsoft 已確認這是<套用>一節所列出的 Microsoft 產品的問題。

更多的資訊

如果要重現問題的步驟

  1. 建立 c + + 應用程式為基礎的.NET Framework 3.5 SP1。

  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描述

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

Thank you for your feedback!

Thank you for your feedback! It sounds like it might be helpful to connect you to one of our Office support agents.

×