Oprava: V počítači .NET Framework 3.5 Service Pack 1 kompilátor JIT a Native Image Generator (Ngen.exe), které používají soubor Mscorjit.dll může způsobit nesprávný kód

Překlady článku Překlady článku
ID článku: 957542 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

V počítači Microsoft .NET Framework 3.5 Service Pack 1 (SP1) může způsobit nesprávný kód kompilátor-in-time (JIT) a Native Image Generator (Ngen.exe), které používají soubor Mscorjit.dll. 32Bitová aplikace Managed C++ může proto způsobit nesprávné výsledky.

Tento problém nastane v případě splnění následujících podmínek:
  • Třídy ve zdrojovém kódu nebo struct má méně než čtyřech variantách skalární a žádné spravované objekt odkazy.
  • Použít Cpblk instrukce nebo instrukce Initblk.
Poznámka: Tento problém nenastává v 64bitové aplikace.

Příčina

K tomuto problému dochází kvůli regresní v .NET Framework 3.5 SP1.

Řešení

Informace o opravě hotfix

K dispozici je podporovaná oprava hotfix od společnosti Microsoft. Tato oprava hotfix je však určena pouze k opravě problému popsanému v tomto článku. Použijte tuto opravu hotfix pouze u systémů, kde dochází k tomuto konkrétnímu problému. Tato oprava hotfix může být dále testována. Pokud Vás tento problém závažně nepostihuje, doporučujeme počkat na další aktualizaci softwaru, která bude tuto opravu hotfix obsahovat.

Chcete-li stáhnout tuto opravu hotfix z MSDN Windows kód, naleznete na následujícím webu:
http://code.msdn.microsoft.com/KB957542

Poznámka: Zobrazí kód Galerie MSDN jazyky, pro které je oprava hotfix k dispozici. Pokud jste váš jazyk uveden, je, protože stránka Galerie kód prostředku není k dispozici pro daný jazyk.

Poznámka: Pokud vyskytnout další problémy nebo jakékoli řešení potíží je vyžadován, pravděpodobně budete muset vytvořit zvláštní požadavek na službu. Výdaje na technickou podporu se týkají dalších otázek a problémů, které nelze vyřešit pomocí této opravy konkrétní opravy hotfix. Navštivte následující web společnosti Microsoft pro získání telefonního čísla na Zákaznické centrum, nebo pokud chcete vytvořit samostatnou žádost o podporu:
http://support.microsoft.com/contactus/?ws=support
Poznámka: Pokud máte 32bitová aplikace spuštěná na 64bitové platformě, opravu hotfix pro 64bitové verze Chcete-li tento problém vyřešit.

Požadavky

Musíte mít .NET Framework 3.5 SP1 nainstalovali tuto opravu hotfix.

Požadavek na restartování

Pravděpodobně k restartování počítače, pokud jsou používány žádné soubory, které jsou aktualizovány.

Informace o nahrazení opravy hotfix

Tato oprava Hotfix nenahrazuje žádné další opravy Hotfix.

INFORMACE O SOUBORECH

Anglická verze této opravy hotfix má následující (nebo pozdější) atributy souborů. Data a časy jednotlivých souborů jsou uvedeny ve formátu UTC (Coordinated Universal Time). Pokud zobrazíte informace o souboru, bude převedena na místní čas. Rozdíl mezi místním ČASEM a najít, použijte kartu časové pásmo v položce datum a čas v ovládacím.
Windows 2000, Windows XP a Windows Server 2003 x 86 verze
Zmenšit tuto tabulkuRozšířit tuto tabulku
Název souboruVerze souboruVelikost souboruDatumČas
Mscordacwks.dll2.0.50727.3068992,26416. Září 200813: 13
Mscorjit.dll2.0.50727.3068367,10416. Září 200813: 13
Mscorlib.dll2.0.50727.30684,546,56016. Září 200813: 13
Mscorwks.dll2.0.50727.30685,815,80816. Září 200813: 13
Windows 2000, Windows XP a Windows Server 2003 x 64 verze
Zmenšit tuto tabulkuRozšířit tuto tabulku
Název souboruVerze souboruVelikost souboruDatumČasPlatforma
Mscordacwks.dll2.0.50727.3068992,26416. Září 200813: 13X86
Mscorjit.dll2.0.50727.3068367,10416. Září 200813: 13X86
Mscorlib.dll2.0.50727.30684,546,56016. Září 200813: 13X86
Mscorwks.dll2.0.50727.30685,815,80816. Září 200813: 13X86
Mscordacwks.dll2.0.50727.30681,767,94416. Září 200810: 33X64
Mscorjit.dll2.0.50727.30681,580,03216. Září 200810: 33X64
Mscorlib.dll2.0.50727.30684,562,94416. Září 200810: 33X64
Mscorwks.dll2.0.50727.306810,079,74416. Září 200810: 33X64
Windows 2000, Windows XP a Windows Server 2003 IA-64 verze
Zmenšit tuto tabulkuRozšířit tuto tabulku
Název souboruVerze souboruVelikost souboruDatumČasPlatforma
Mscordacwks.dll2.0.50727.3068992,26416. Září 200813: 13X86
Mscorjit.dll2.0.50727.3068367,10416. Září 200813: 13X86
Mscorlib.dll2.0.50727.30684,546,56016. Září 200813: 13X86
Mscorwks.dll2.0.50727.30685,815,80816. Září 200813: 13X86
Mscordacwks.dll2.0.50727.30683,087,88016. Září 200810: 44IA-64
Mscorjit.dll2.0.50727.30682,560,51216. Září 200810: 44IA-64
Mscorlib.dll2.0.50727.30684,005,88816. Září 200810: 44IA-64
Mscorwks.dll2.0.50727.306820,153,85616. Září 200810: 44IA-64
Windows Vista Service Pack 1 (SP1) a Windows Server 2008 x 86 verze
Zmenšit tuto tabulkuRozšířit tuto tabulku
Název souboruVerze souboruVelikost souboruDatumČasPlatforma
Mscorlib.Resources.dll2.0.50727.3053352,25615. Září 200822: 25X86
Mscorlib.Resources.dll2.0.50727.3053303,10415. Září 200822: 25X86
Mscorlib.Resources.dll2.0.50727.3053299,00815. Září 200822: 25X86
Mscorlib.Resources.dll2.0.50727.3053315,39227. Července 200817: 58X86
Mscorlib.Resources.dll2.0.50727.3053425,98415. Září 200822: 25X86
Mscorlib.Resources.dll2.0.50727.3053307,20027. Července 200817: 58X86
Mscorlib.Resources.dll2.0.50727.3053299,00815. Září 200822: 25X86
Mscorlib.Resources.dll2.0.50727.3053311,29627. Července 200817: 58X86
Mscorlib.Resources.dll2.0.50727.3053331,77615. Září 200822: 25X86
Mscorlib.Resources.dll2.0.50727.3053315,39215. Září 200822: 25X86
Mscorlib.Resources.dll2.0.50727.3053307,20027. Července 200817: 55X86
Mscorlib.Resources.dll2.0.50727.3053348,16027. Července 200817: 58X86
Mscorlib.Resources.dll2.0.50727.3053319,48827. Července 200817: 55X86
Mscorlib.Resources.dll2.0.50727.3053290,81615. Září 200822: 25X86
Mscorlib.Resources.dll2.0.50727.3053303,10415. Září 200822: 25X86
Mscorlib.Resources.dll2.0.50727.3053311,29615. Září 200822: 25X86
Mscorlib.Resources.dll2.0.50727.3053303,10427. Července 200817: 55X86
Mscorlib.Resources.dll2.0.50727.3053307,20015. Září 200822: 25X86
Mscorlib.Resources.dll2.0.50727.1434397,31211. 1. 200822: 59X86
Mscorlib.Resources.dll2.0.50727.3053299,00815. Září 200822: 25X86
Mscorlib.Resources.dll2.0.50727.3053299,00815. Září 200822: 25X86
Mscorlib.Resources.dll2.0.50727.3053278,52827. Července 200817: 55X86
Mscorlib.Resources.dll2.0.50727.3053278,52827. Července 200817: 55X86
Big5.nlpNelze použít66,72818. 12. 200721: 03Nelze použít
Bopomofo.nlpNelze použít82,17218. 12. 200721: 03Nelze použít
Ksc.nlpNelze použít116,75618. 12. 200721: 04Nelze použít
Mscorlib.dll2.0.50727.30684,546,56001 OCT 200822: 27X86
Normidna.nlpNelze použít59,34218. 12. 200721: 05Nelze použít
Normnfc.nlpNelze použít45,79418. 12. 200721: 05Nelze použít
Normnfd.nlpNelze použít39,28418. 12. 200721: 05Nelze použít
Normnfkc.nlpNelze použít66,38418. 12. 200721: 05Nelze použít
Normnfkd.nlpNelze použít60,29418. 12. 200721: 05Nelze použít
Prc.nlpNelze použít83,74818. 12. 200721: 05Nelze použít
Prcp.nlpNelze použít83,74818. 12. 200721: 05Nelze použít
Sortkey.nlpNelze použít262,14818. 12. 200721: 05Nelze použít
Sorttbls.nlpNelze použít20,32018. 12. 200721: 05Nelze použít
Xjis.nlpNelze použít28,28818. 12. 200721: 05Nelze použít
Mscordacwks.dll2.0.50727.3068992,26401 OCT 200822: 27X86
Mscorjit.dll2.0.50727.3068367,10424. Září 200822: 21X86
Mscorwks.dll2.0.50727.30685,815,80801 OCT 200822: 27X86
Windows Vista SP1 a Windows Server 2008 x 64 verze
Zmenšit tuto tabulkuRozšířit tuto tabulku
Název souboruVerze souboruVelikost souboruDatumČasPlatforma
Big5.nlpNelze použít66,72818. 12. 200721: 01Nelze použít
Bopomofo.nlpNelze použít82,17218. 12. 200721: 01Nelze použít
Ksc.nlpNelze použít116,75618. 12. 200721: 02Nelze použít
Mscorlib.dll2.0.50727.30684,562,94401 OCT 200822: 25X64
Normidna.nlpNelze použít59,34218. 12. 200721: 03Nelze použít
Normnfc.nlpNelze použít45,79418. 12. 200721: 03Nelze použít
Normnfd.nlpNelze použít39,28418. 12. 200721: 03Nelze použít
Normnfkc.nlpNelze použít66,38418. 12. 200721: 03Nelze použít
Normnfkd.nlpNelze použít60,29418. 12. 200721: 03Nelze použít
Prc.nlpNelze použít83,74818. 12. 200721: 03Nelze použít
Prcp.nlpNelze použít83,74818. 12. 200721: 03Nelze použít
Sortkey.nlpNelze použít262,14818. 12. 200721: 03Nelze použít
Sorttbls.nlpNelze použít20,32018. 12. 200721: 03Nelze použít
Xjis.nlpNelze použít28,28818. 12. 200721: 03Nelze použít
Mscordacwks.dll2.0.50727.30681,767,94401 OCT 200822: 25X64
Mscorjit.dll2.0.50727.30681,580,03224. Září 200823: 06X64
Mscorwks.dll2.0.50727.306810,079,74401 OCT 200822: 25X64
Mscorlib.Resources.dll2.0.50727.3053352,25615. Září 200822: 26X86
Mscorlib.Resources.dll2.0.50727.3053303,10415. Září 200822: 25X86
Mscorlib.Resources.dll2.0.50727.3053299,00815. Září 200822: 26X86
Mscorlib.Resources.dll2.0.50727.3053315,39227. Července 200818: 02X86
Mscorlib.Resources.dll2.0.50727.3053425,98415. Září 200822: 26X86
Mscorlib.Resources.dll2.0.50727.3053307,20027. Července 200818: 02X86
Mscorlib.Resources.dll2.0.50727.3053299,00815. Září 200822: 26X86
Mscorlib.Resources.dll2.0.50727.3053311,29627. Července 200818: 02X86
Mscorlib.Resources.dll2.0.50727.3053331,77615. Září 200822: 26X86
Mscorlib.Resources.dll2.0.50727.3053315,39215. Září 200822: 25X86
Mscorlib.Resources.dll2.0.50727.3053307,20027. Července 200817: 56X86
Mscorlib.Resources.dll2.0.50727.3053348,16027. Července 200818: 02X86
Mscorlib.Resources.dll2.0.50727.3053319,48827. Července 200817: 56X86
Mscorlib.Resources.dll2.0.50727.3053290,81615. Září 200822: 26X86
Mscorlib.Resources.dll2.0.50727.3053303,10415. Září 200822: 25X86
Mscorlib.Resources.dll2.0.50727.3053311,29615. Září 200822: 25X86
Mscorlib.Resources.dll2.0.50727.3053303,10427. Července 200817: 56X86
Mscorlib.Resources.dll2.0.50727.3053307,20015. Září 200822: 25X86
Mscorlib.Resources.dll2.0.50727.1434397,31211. 1. 200822: 59X86
Mscorlib.Resources.dll2.0.50727.3053299,00815. Září 200822: 25X86
Mscorlib.Resources.dll2.0.50727.3053299,00815. Září 200822: 25X86
Mscorlib.Resources.dll2.0.50727.3053278,52827. Července 200817: 56X86
Mscorlib.Resources.dll2.0.50727.3053278,52827. Července 200817: 56X86
Big5.nlpNelze použít66,72818. 12. 200721: 03Nelze použít
Bopomofo.nlpNelze použít82,17218. 12. 200721: 03Nelze použít
Ksc.nlpNelze použít116,75618. 12. 200721: 04Nelze použít
Mscorlib.dll2.0.50727.30684,546,56001 OCT 200822: 27X86
Normidna.nlpNelze použít59,34218. 12. 200721: 05Nelze použít
Normnfc.nlpNelze použít45,79418. 12. 200721: 05Nelze použít
Normnfd.nlpNelze použít39,28418. 12. 200721: 05Nelze použít
Normnfkc.nlpNelze použít66,38418. 12. 200721: 05Nelze použít
Normnfkd.nlpNelze použít60,29418. 12. 200721: 05Nelze použít
Prc.nlpNelze použít83,74818. 12. 200721: 05Nelze použít
Prcp.nlpNelze použít83,74818. 12. 200721: 05Nelze použít
Sortkey.nlpNelze použít262,14818. 12. 200721: 05Nelze použít
Sorttbls.nlpNelze použít20,32018. 12. 200721: 05Nelze použít
Xjis.nlpNelze použít28,28818. 12. 200721: 05Nelze použít
Mscordacwks.dll2.0.50727.3068992,26401 OCT 200822: 27X86
Mscorjit.dll2.0.50727.3068367,10424. Září 200822: 21X86
Mscorwks.dll2.0.50727.30685,815,80801 OCT 200822: 27X86
Windows Vista SP1 a Windows Server 2008 IA-64 verze
Zmenšit tuto tabulkuRozšířit tuto tabulku
Název souboruVerze souboruVelikost souboruDatumČasPlatforma
Big5.nlpNelze použít66,72818. 12. 200721: 06Nelze použít
Bopomofo.nlpNelze použít82,17218. 12. 200721: 06Nelze použít
Ksc.nlpNelze použít116,75618. 12. 200721: 06Nelze použít
Mscorlib.dll2.0.50727.30684,005,88801 OCT 200822: 26IA-64
Normidna.nlpNelze použít59,34218. 12. 200721: 08Nelze použít
Normnfc.nlpNelze použít45,79418. 12. 200721: 08Nelze použít
Normnfd.nlpNelze použít39,28418. 12. 200721: 08Nelze použít
Normnfkc.nlpNelze použít66,38418. 12. 200721: 08Nelze použít
Normnfkd.nlpNelze použít60,29418. 12. 200721: 08Nelze použít
Prc.nlpNelze použít83,74818. 12. 200721: 08Nelze použít
Prcp.nlpNelze použít83,74818. 12. 200721: 08Nelze použít
Sortkey.nlpNelze použít262,14818. 12. 200721: 08Nelze použít
Sorttbls.nlpNelze použít20,32018. 12. 200721: 08Nelze použít
Xjis.nlpNelze použít28,28818. 12. 200721: 08Nelze použít
Mscordacwks.dll2.0.50727.30683,087,88001 OCT 200822: 26IA-64
Mscorjit.dll2.0.50727.30682,560,51224. Září 200823: 14IA-64
Mscorwks.dll2.0.50727.306820,153,85601 OCT 200822: 26IA-64
Mscorlib.Resources.dll2.0.50727.3053315,39227. Července 200817: 58X86
Mscorlib.Resources.dll2.0.50727.3053311,29627. Července 200817: 58X86
Mscorlib.Resources.dll2.0.50727.3053348,16027. Července 200817: 58X86
Mscorlib.Resources.dll2.0.50727.3053319,48827. Července 200817: 58X86
Mscorlib.Resources.dll2.0.50727.3053278,52827. Července 200817: 58X86
Mscorlib.Resources.dll2.0.50727.3053278,52827. Července 200817: 59X86
Big5.nlpNelze použít66,72818. 12. 200721: 03Nelze použít
Bopomofo.nlpNelze použít82,17218. 12. 200721: 03Nelze použít
Ksc.nlpNelze použít116,75618. 12. 200721: 04Nelze použít
Mscorlib.dll2.0.50727.30684,546,56001 OCT 200822: 27X86
Normidna.nlpNelze použít59,34218. 12. 200721: 05Nelze použít
Normnfc.nlpNelze použít45,79418. 12. 200721: 05Nelze použít
Normnfd.nlpNelze použít39,28418. 12. 200721: 05Nelze použít
Normnfkc.nlpNelze použít66,38418. 12. 200721: 05Nelze použít
Normnfkd.nlpNelze použít60,29418. 12. 200721: 05Nelze použít
Prc.nlpNelze použít83,74818. 12. 200721: 05Nelze použít
Prcp.nlpNelze použít83,74818. 12. 200721: 05Nelze použít
Sortkey.nlpNelze použít262,14818. 12. 200721: 05Nelze použít
Sorttbls.nlpNelze použít20,32018. 12. 200721: 05Nelze použít
Xjis.nlpNelze použít28,28818. 12. 200721: 05Nelze použít
Mscordacwks.dll2.0.50727.3068992,26401 OCT 200822: 27X86
Mscorjit.dll2.0.50727.3068367,10424. Září 200822: 21X86
Mscorwks.dll2.0.50727.30685,815,80801 OCT 200822: 27X86

Jak potíže obejít

Pro řešení tohoto problému, použijte jednu z následujících metod.

Metoda 1

Pokud kód aplikace připomíná ukázkový kód v části "Další informace", vyhledejte následující řádek kódu.
#define GETVECTOR3D(vec3d) (*reinterpret_cast<AcGeVector3d*>(&((vec3d).m_x))
Tento řádek kódu změňte následujícím způsobem.
#define GETVECTOR3D(vec3d) (*reinterpret_cast<AcGeVector3d*>(&((vec3d)))

Metoda 2

Zavedení souboru INI. Chcete-li to provést, vytvořte soubor obsahující následující kód.
[.NET Framework Debugging Control]
AllowOptimize=0
Název souboru INI stejné jako problematický modulu, ale používat příponu INI namísto příponu DLL. Například pro ukázkový kód v části "Další informace" název souboru INI souboru Bug.ini. Umístit soubor Bug.ini ve stejném adresáři jako soubor Bug.dll.

Poznámka: Nevýhodou této metody je potenciální efekt výkonu žádné optimalizace. Precompile modulu pomocí Native Image Generator (Ngen.exe), není tato metoda použitelné.

Metoda 3

Selektivně použít možnost NoOptimization výčtu MethodImplOptions problematické metod pomocí třídy MethodImplAttribute.

Poznámka: Tato metoda zakáže kompilátor JIT a Native Image Generator (Ngen.exe) na úrovni metoda optimalizace. Kolik je ovlivněn výkon liší v závislosti na metodě.

Prohlášení

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.

Další informace

Postup reprodukce problému

  1. Vytvoření C++ aplikace, která je založena na .NET Framework 3.5 SP1.
  2. Do projektu přidat cpp souboru název souboru Bug.cpp tento soubor a vložte následující kód v souboru 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. Kompilace souboru Bug.cpp, spusťte následující příkaz:
    cl /clr /GL /O2 bug.cpp /link /dll /out:bug.dll
  4. Vytvořit nový Microsoft Visual C# projekt použít jako klienta projektu.
  5. Název souboru kód souboru Test.cs a vložte následující kód v souboru 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. Kompilace souboru Test.cs, spusťte následující příkaz:
    CSC /r:bug.dll test.cs
  7. Manifest vložit do souboru Test.exe, spusťte následující příkaz:
    MT.exe - nologo - manifestu bug.dll.manifest - outputresource:test.exe;1
  8. Spusťte soubor Test.exe.
Všimněte si, že skutečný výsledek je následující:
1.33333333333333, 1.333333333333, 0
Očekávaný výsledek však je následující:
1.33333333333333, 0, 0

Odkazy

Další informace o terminologii používané v aktualizacích softwaru naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
824684Popis standardní terminologie používané při popisu aktualizací softwaru společnosti Microsoft

Vlastnosti

ID článku: 957542 - Poslední aktualizace: 22. října 2008 - Revize: 1.1
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft .NET Framework 3.5 Service Pack 1
Klíčová slova: 
kbmt kbexpertiseadvanced kbfix kbqfe kbhotfixserver KB957542 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:957542

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com