Você está offline; aguardando reconexão

CORRECÇÃO: Os objetos não são serializados corretamente quando serializar e desserializar objetos DataSet usando o parâmetro de formato SerializationFormat.Binary em um aplicativo baseado no .NET Framework 2.0

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 948646
Sintomas
Se um aplicativo de baseado no .NET Framework 2.0 do Microsoft tenta para serializar e desserializar objetos DataSet usando o parâmetro de formato SerializationFormat.Binary , os objetos não são serializados corretamente.
Causa
Esse problema ocorre devido a um erro no arquivo System.Design.dll.
Resolução

Informações sobre o hotfix

Um hotfix com suporte foi disponibilizada pela Microsoft. No entanto, destina-se a corrigir o problema descrito neste artigo. Aplique-o somente aos sistemas que apresentarem esse problema específico.

Para resolver esse problema, contate o Microsoft Customer Atendimento para obter o hotfix. Para obter uma lista completa de telefones do serviço de suporte a clientes da Microsoft e informações sobre os custos de suporte, visite o seguinte site: Observação Em alguns casos, as taxas cobradas pelas ligações para chamadas de suporte podem ser canceladas se um profissional de suporte da Microsoft determinar que uma atualização específica resolverá o problema. Os custos normais de suporte serão aplicados a questões e problemas que não se qualificam à atualização específica em questão de suporte adicionais.

Pré-requisitos

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

Requisitos de reinicialização

Não é necessário reiniciar o computador após aplicar esse hotfix.

Informações sobre a substituição do hotfix

Esse hotfix não substitui outros hotfixes.

Informações sobre o arquivo

A versão em inglês deste hotfix tem atributos de arquivo (ou atributos de arquivo posteriores) listados na tabela a seguir. As datas e horas desses arquivos estão listadas no horário de universal coordenado (UTC). Quando você exibe as informações do arquivo, ele é convertido para a hora local. Para encontrar 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.
Nome de arquivoVersão do arquivoTamanho do arquivoDataTempoPlataforma
System.design.dll2.0.50727.18155,046,27227 De fevereiro de 200811: 47x 86
Situação
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".

Etapas para reproduzir o problema

  1. Criar um novo aplicativo de console chamado "ConsoleAppTestDTset."
  2. Criar um novo item DataSet que é chamado de "DsTest.xsd."
  3. Adicionar uma tabela de tipo de DataTable é chamada de "dtTest."
  4. Adicione duas colunas que são nomeadas col1 e col2 à tabela. Verifique se o tipo de dados de cada coluna é definido para System.Int32 .
  5. Defina a expressão a seguir para "col 2":
    col1 * 2
  6. No método principal, insira o seguinte código:
    static void Main(string[] args)        {            // Create a dataset instance.            DataSet ds = new DsTest();            // Add a row.            ds.Tables["dtTest"].Rows.Add(1);            ds.Tables["dtTest"].Rows.Add(2);            ds.Tables["dtTest"].Rows.Add(3);            // Show rows to see that the expression works            foreach (DataRow dr in ds.Tables["dtTest"].Rows)            {                Console.WriteLine("col1: {0}, col2: {1}", dr[0], dr[1]);            }            Console.WriteLine("Expression = " + ds.Tables["dtTest"].Columns["col2"].Expression);            Console.WriteLine();            // Do the serialization or the deserialization.            byte[] serializedDS;            ds.SchemaSerializationMode = SchemaSerializationMode.ExcludeSchema;            // Using SerializationFormat.Binary fails.            ds.RemotingFormat = SerializationFormat.Binary;            // Using SerializationFormat.Xml works.            //ds.RemotingFormat = SerializationFormat.Xml;                        // Serialize.            MemoryStream ms = new MemoryStream();            BinaryFormatter bf = new BinaryFormatter();            bf.Serialize(ms, ds);            serializedDS = ms.ToArray();            // Deserialize.            ms.Write(serializedDS, 0, serializedDS.Length);                                     ms.Position = 0;            DataSet newDs = (DataSet)bf.Deserialize(ms);            // Display the deserialized dataset.            foreach (DataRow dr in newDs.Tables["dtTest"].Rows)            {                Console.WriteLine("col1: {0}, col2: {1}", dr[0], dr[1]);            }            Console.WriteLine("Expression = " + newDs.Tables["dtTest"].Columns["col2"].Expression);            Console.WriteLine();            Console.WriteLine("Done..!");            Console.Read();        }
    When you run the application, the expression string is not displayed in the Output Window as expected.
  7. No arquivo DsTest.Designer.cs, localize o código a seguir:
    [System.Diagnostics.DebuggerNonUserCodeAttribute()]protected DsTest(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : base(info, context, false) {   if ((this.IsBinarySerialized(info, context) == true))    {      this.InitVars(false);         System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler1 = new System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged);         this.Tables.CollectionChanged += schemaChangedHandler1;         this.Relations.CollectionChanged += schemaChangedHandler1;         return;   }...
  8. Substituir esse código usando o código a seguir:
    [System.Diagnostics.DebuggerNonUserCodeAttribute()]protected DsTest(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : base(info, context, false) {   if ((this.IsBinarySerialized(info, context) == true))    {      this.InitVars(false);         System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler1 = new System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged);         this.Tables.CollectionChanged += schemaChangedHandler1;         this.Relations.CollectionChanged += schemaChangedHandler1;       // These two lines are the only new ones.      if ((this.DetermineSchemaSerializationMode(info, context) == System.Data.SchemaSerializationMode.ExcludeSchema))               this.InitExpressions();       return;   }...
    quando você salva e execute novamente o aplicativo, a seqüência de expressão é exibida na janela de saída.
Observação Se você modificar o objeto DataSet e, em seguida, recriar o aplicativo, o código que você adicionou na etapa 8 desaparece.

Para obter mais informações sobre objetos DataSet de serialização binária, visite o seguinte site da Web Microsoft Developer Network (MSDN):Para obter mais informações sobre terminologia de atualização de software, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
824684Descrição da terminologia padrão que é usada para descrever as atualizações de software
DataSet VS 2005 serialização SerializationFormat ExcludeSchema Expression MSDataSetGenerator InitExpressions

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 948646 - Última Revisão: 04/15/2008 16:14:48 - Revisão: 1.0

Microsoft .NET Framework 2.0

  • kbmt kbpubtypekc kbqfe kbhotfixserver kbexpertiseadvanced KB948646 KbMtpt
Comentários