Sintomas

Em um computador que esteja executando o Microsoft.NET Framework 3.5 Service Pack 1 (SP1), o compilador just-in-time (JIT) e o Native Image Generator (Ngen.exe) que utilizam o ficheiro mscorjit podem gerar código incorreto. Portanto, um aplicativo de C++ gerenciado de 32 bits pode produzir resultados incorretos.

Esse problema ocorre caso as seguintes condições sejam verdadeiras:

  • A estrutura ou a classe no código-fonte tem menos de quatro variedades escalares e nenhuma referência de objeto gerenciado.

  • Use a instrução Cpblk ou a instrução Initblk.

Observação: Esse problema não ocorre em um aplicativo de 64 bits.

Causa

Esse problema ocorre devido a uma regressão no.NET Framework 3.5 SP1.

Resolução

Informações sobre o hotfix

Um hotfix compatível foi disponibilizado pela Microsoft. No entanto, esse hotfix destina-se a corrigir somente o problema descrito neste artigo. Aplique este hotfix somente aos sistemas que apresentarem esse problema específico. Esta correção poderá ser submetida a testes adicionais. Portanto, se esse problema não o prejudicar, recomendamos que você aguarde a próxima atualização de software que contenha esse hotfix.

Para baixar esse hotfix do MSDN Code Gallery, visite o seguinte site da Microsoft:

http://code.msdn.microsoft.com/KB957542
Observação: O MSDN Code Gallery exibe os idiomas para os quais o hotfix está disponível. Se você não vir seu idioma listado, é porque a página de recursos da Galeria de código não está disponível para esse idioma.


Observação: caso outros problemas estejam ocorrendo ou caso qualquer solução de problemas seja necessária, talvez você precise criar uma solicitação de serviço separada. Os custos normais de suporte serão aplicados a questões de suporte adicionais e problemas que não sejam específicos deste hotfix. Para obter uma lista completa dos números de telefone do Atendimento Microsoft e suporte ou para criar uma solicitação de serviço separada, visite o seguinte site da Microsoft:

http://support.microsoft.com/contactus/?ws=supportObservação: Se você tiver um aplicativo de 32 bits que é executado em uma plataforma de 64 bits, aplique o hotfix para a versão de 64 bits resolver esse problema.

Pré-requisitos:

Você deve ter o.NET Framework 3.5 SP1 instalado para aplicar esse hotfix.

Requisitos de reinicialização:

Você terá que reiniciar o computador se os arquivos atualizados estão sendo usados.

Informações de substituição do hotfix:

Esse hotfix não substitui outros hotfixes.

Informações sobre o arquivo:

A versão em inglês deste hotfix possui os atributos de arquivo (ou atributos de arquivo posteriores) listados na tabela a seguir. As datas e horas desses arquivos estão listadas na Hora Universal Coordenada (UTC). Quando você exibe as informações do arquivo, ele é convertido para a hora local. Para localizar a diferença entre o UTC e a hora local, use a guia Fuso Horário no item Data e Hora no Painel de Controle.

Windows 2000, Windows XP e Windows Server 2003, x86 versões

Nome do Arquivo

Versão do arquivo

Tamanho do arquivo

Data

Hora

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 e Windows Server 2003, x64 versões

Nome do Arquivo

Versão do arquivo

Tamanho do arquivo

Data

Hora

Plataforma

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 e Windows Server 2003, versões IA-64

Nome do Arquivo

Versão do arquivo

Tamanho do arquivo

Data

Hora

Plataforma

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) e Windows Server 2008 x86 versões

Nome do Arquivo

Versão do arquivo

Tamanho do arquivo

Data

Hora

Plataforma

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

Não aplicável

66,728

18-Dec-2007

21:03

Não aplicável

Bopomofo.nlp

Não aplicável

82,172

18-Dec-2007

21:03

Não aplicável

Ksc.nlp

Não aplicável

116,756

18-Dec-2007

21:04

Não aplicável

Mscorlib.dll

2.0.50727.3068

4,546,560

01-Oct-2008

22:27

x86

Normidna.nlp

Não aplicável

59,342

18-Dec-2007

21:05

Não aplicável

Normnfc.nlp

Não aplicável

45,794

18-Dec-2007

21:05

Não aplicável

Normnfd.nlp

Não aplicável

39,284

18-Dec-2007

21:05

Não aplicável

Normnfkc.nlp

Não aplicável

66,384

18-Dec-2007

21:05

Não aplicável

Normnfkd.nlp

Não aplicável

60,294

18-Dec-2007

21:05

Não aplicável

Prc.nlp

Não aplicável

83,748

18-Dec-2007

21:05

Não aplicável

Prcp.nlp

Não aplicável

83,748

18-Dec-2007

21:05

Não aplicável

Sortkey.nlp

Não aplicável

262,148

18-Dec-2007

21:05

Não aplicável

Sorttbls.nlp

Não aplicável

20,320

18-Dec-2007

21:05

Não aplicável

Xjis.nlp

Não aplicável

28,288

18-Dec-2007

21:05

Não aplicável

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 e Windows Server 2008 x64 versões

Nome do Arquivo

Versão do arquivo

Tamanho do arquivo

Data

Hora

Plataforma

Big5.nlp

Não aplicável

66,728

18-Dec-2007

21:01

Não aplicável

Bopomofo.nlp

Não aplicável

82,172

18-Dec-2007

21:01

Não aplicável

Ksc.nlp

Não aplicável

116,756

18-Dec-2007

21:02

Não aplicável

Mscorlib.dll

2.0.50727.3068

4,562,944

01-Oct-2008

22:25

x64

Normidna.nlp

Não aplicável

59,342

18-Dec-2007

21:03

Não aplicável

Normnfc.nlp

Não aplicável

45,794

18-Dec-2007

21:03

Não aplicável

Normnfd.nlp

Não aplicável

39,284

18-Dec-2007

21:03

Não aplicável

Normnfkc.nlp

Não aplicável

66,384

18-Dec-2007

21:03

Não aplicável

Normnfkd.nlp

Não aplicável

60,294

18-Dec-2007

21:03

Não aplicável

Prc.nlp

Não aplicável

83,748

18-Dec-2007

21:03

Não aplicável

Prcp.nlp

Não aplicável

83,748

18-Dec-2007

21:03

Não aplicável

Sortkey.nlp

Não aplicável

262,148

18-Dec-2007

21:03

Não aplicável

Sorttbls.nlp

Não aplicável

20,320

18-Dec-2007

21:03

Não aplicável

Xjis.nlp

Não aplicável

28,288

18-Dec-2007

21:03

Não aplicável

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

Não aplicável

66,728

18-Dec-2007

21:03

Não aplicável

Bopomofo.nlp

Não aplicável

82,172

18-Dec-2007

21:03

Não aplicável

Ksc.nlp

Não aplicável

116,756

18-Dec-2007

21:04

Não aplicável

Mscorlib.dll

2.0.50727.3068

4,546,560

01-Oct-2008

22:27

x86

Normidna.nlp

Não aplicável

59,342

18-Dec-2007

21:05

Não aplicável

Normnfc.nlp

Não aplicável

45,794

18-Dec-2007

21:05

Não aplicável

Normnfd.nlp

Não aplicável

39,284

18-Dec-2007

21:05

Não aplicável

Normnfkc.nlp

Não aplicável

66,384

18-Dec-2007

21:05

Não aplicável

Normnfkd.nlp

Não aplicável

60,294

18-Dec-2007

21:05

Não aplicável

Prc.nlp

Não aplicável

83,748

18-Dec-2007

21:05

Não aplicável

Prcp.nlp

Não aplicável

83,748

18-Dec-2007

21:05

Não aplicável

Sortkey.nlp

Não aplicável

262,148

18-Dec-2007

21:05

Não aplicável

Sorttbls.nlp

Não aplicável

20,320

18-Dec-2007

21:05

Não aplicável

Xjis.nlp

Não aplicável

28,288

18-Dec-2007

21:05

Não aplicável

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 e Windows Server 2008, versões IA-64

Nome do Arquivo

Versão do arquivo

Tamanho do arquivo

Data

Hora

Plataforma

Big5.nlp

Não aplicável

66,728

18-Dec-2007

21:06

Não aplicável

Bopomofo.nlp

Não aplicável

82,172

18-Dec-2007

21:06

Não aplicável

Ksc.nlp

Não aplicável

116,756

18-Dec-2007

21:06

Não aplicável

Mscorlib.dll

2.0.50727.3068

4,005,888

01-Oct-2008

22:26

IA-64

Normidna.nlp

Não aplicável

59,342

18-Dec-2007

21:08

Não aplicável

Normnfc.nlp

Não aplicável

45,794

18-Dec-2007

21:08

Não aplicável

Normnfd.nlp

Não aplicável

39,284

18-Dec-2007

21:08

Não aplicável

Normnfkc.nlp

Não aplicável

66,384

18-Dec-2007

21:08

Não aplicável

Normnfkd.nlp

Não aplicável

60,294

18-Dec-2007

21:08

Não aplicável

Prc.nlp

Não aplicável

83,748

18-Dec-2007

21:08

Não aplicável

Prcp.nlp

Não aplicável

83,748

18-Dec-2007

21:08

Não aplicável

Sortkey.nlp

Não aplicável

262,148

18-Dec-2007

21:08

Não aplicável

Sorttbls.nlp

Não aplicável

20,320

18-Dec-2007

21:08

Não aplicável

Xjis.nlp

Não aplicável

28,288

18-Dec-2007

21:08

Não aplicável

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

Não aplicável

66,728

18-Dec-2007

21:03

Não aplicável

Bopomofo.nlp

Não aplicável

82,172

18-Dec-2007

21:03

Não aplicável

Ksc.nlp

Não aplicável

116,756

18-Dec-2007

21:04

Não aplicável

Mscorlib.dll

2.0.50727.3068

4,546,560

01-Oct-2008

22:27

x86

Normidna.nlp

Não aplicável

59,342

18-Dec-2007

21:05

Não aplicável

Normnfc.nlp

Não aplicável

45,794

18-Dec-2007

21:05

Não aplicável

Normnfd.nlp

Não aplicável

39,284

18-Dec-2007

21:05

Não aplicável

Normnfkc.nlp

Não aplicável

66,384

18-Dec-2007

21:05

Não aplicável

Normnfkd.nlp

Não aplicável

60,294

18-Dec-2007

21:05

Não aplicável

Prc.nlp

Não aplicável

83,748

18-Dec-2007

21:05

Não aplicável

Prcp.nlp

Não aplicável

83,748

18-Dec-2007

21:05

Não aplicável

Sortkey.nlp

Não aplicável

262,148

18-Dec-2007

21:05

Não aplicável

Sorttbls.nlp

Não aplicável

20,320

18-Dec-2007

21:05

Não aplicável

Xjis.nlp

Não aplicável

28,288

18-Dec-2007

21:05

Não aplicável

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

Solução alternativa

Para contornar esse problema, use um dos seguintes métodos.

Método 1

Se o código do aplicativo se pareça com o código de exemplo na seção "Mais informações", localize a seguinte linha de código.

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

Altere esta linha de código como a seguir.

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

Método 2

Implante um arquivo. ini. Para fazer isso, crie um arquivo que contém o código a seguir.

[.NET Framework Debugging Control]AllowOptimize=0

Nomeie o arquivo. ini igual o módulo problemático, mas usar a extensão. ini em vez da extensão. dll. Por exemplo, para o código de exemplo na seção "Mais informações", nomeie o arquivo. ini o arquivo Bug.ini. Coloque o arquivo Bug.ini no mesmo diretório que o arquivo Bug.dll.

Observação: A desvantagem desse método é o efeito de desempenho potencial para nenhuma otimizações. Se você usa o Native Image Generator (Ngen.exe) para pré-compilar o módulo, esse método não é aplicável.

Método 3

Aplique seletivamente a opção de NoOptimization da enumeração MethodImplOptions aos métodos problemáticos, usando a classe MethodImplAttribute .

Observação: Este método desativa as otimizações para o compilador JIT e o Native Image Generator (Ngen.exe) em um nível por método. Quanto o desempenho é afetado varia de acordo com o método.

Status

A Microsoft confirma que este é um problema em seus produtos listados na seção "Aplica-se a".

Mais informações

Etapas para simular o problema

  1. Crie um aplicativo de C++ que se baseia no.NET Framework 3.5 SP1.

  2. Adicionar um arquivo. cpp no projeto, nomeie o arquivo o arquivo Bug.cpp e, em seguida, cole o seguinte código no arquivo 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. Para compilar o arquivo Bug.cpp, execute o seguinte comando:

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

  4. Crie um projeto Microsoft Visual C# novo a ser usado como o projeto do cliente.

  5. Nomeie o arquivo de código o arquivo Test.cs e, em seguida, cole o seguinte código no arquivo 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. Para compilar o arquivo Test.cs, execute o seguinte comando:

    CSC /r:bug.dll test.cs

  7. Para incorporar o manifesto para o arquivo Test.exe, execute o seguinte comando:

    MT.exe - /nologo-manifesto bug.dll.manifest-outputresource:test.exe;1

  8. Execute o arquivo Test.exe.

Observe que o resultado real é o seguinte:

1.33333333333333, 1.333333333333, 0No entanto, o resultado esperado é o seguinte:

1.33333333333333, 0, 0

Referências

Para obter mais informações sobre a terminologia de atualização de software, clique no número abaixo para ler o artigo na Base de Conhecimento da Microsoft:

824684 descrição da terminologia padrão usada para descrever as atualizações de software

Precisa de mais ajuda?

Expanda suas habilidades
Explore o treinamento
Obtenha novos recursos primeiro
Ingressar no Microsoft Insider

Essas informações foram úteis?

Qual é o seu grau de satisfação com a qualidade do idioma?
O que afetou sua experiência?

Obrigado pelos seus comentários!

×