Como incorporar e acessar recursos usando translation from VPE for Csharp Visual

Traduções deste artigo Traduções deste artigo
ID do artigo: 319292 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Este artigo passo a passo descreve como usar translation from VPE for Csharp Visual para incorporar recursos como parte do assembly e acessar os recursos em tempo de execução.

Visão geral

O .NET Framework pode encapsular arquivos como parte de um assembly compilado. Esses arquivos são conhecidos como recursos incorporados. Esses recursos são totalmente separados dos arquivos .resx e .Resources são associados com o assembly. Você pode acessar esses recursos em tempo de execução através da classe de assembly do namespace System.Reflection .

Uma grande vantagem de incorporar recursos para o manifesto é que como os arquivos são parte do seu assembly compilado, o usuário não pode acidentalmente excluir ou substitua arquivos que são essenciais para seu aplicativo, que, em alguns casos, pode impedir a execução de seu programa. Uma limitação dessa abordagem é que você não pode salvar alterações neste arquivo para o assembly sem recompilar o programa. Devido a isso, inclui somente arquivos que não serão alterados durante o tempo de vida de seu aplicativo como um recurso incorporado.

Demonstração passo a passo

Para adicionar recursos incorporados ao seu projeto, primeiro você deve adicionar os arquivos como parte do seu projeto. Após ter adicionado os arquivos para seu projeto, você pode acessar e exibir os recursos por meio do namespace System.Reflection .

Adicionar recursos incorporados

Para adicionar um arquivo de texto e um arquivo de imagem para seu projeto como recursos incorporados, execute as seguintes etapas:
  1. Crie um novo projeto Windows Application para esta demonstração. Este formulário é usado para exibir os recursos que são acessados pelo assembly em execução durante o tempo de execução.
  2. Clique com o botão direito seu nome de projeto, clique em Adicionar e, em seguida, clique em Add New Item .
  3. Na caixa de diálogo New Item , selecione o Arquivo de texto a partir do menu e nomeie o arquivo MyTextFile.txt. Quando o arquivo abre no ambiente de desenvolvimento integrado (IDE), adicione algum texto e, em seguida, feche o arquivo.
  4. Repita as etapas 1 e 2 para adicionar uma imagem de bitmap para seu projeto, mas em vez de selecionar Arquivo de texto como o novo tipo de item, selecione o Arquivo de bitmap e alterar o nome do arquivo para MyImage.bmp . Quando a nova imagem for aberta no IDE, desenhar algo na imagem e, em seguida, feche o arquivo.
  5. Clique com o botão direito do mouse no arquivo de texto ou o bitmap e selecione Propriedades .
  6. Na caixa de diálogo Propriedades , localize a propriedade Build Action . Por padrão, essa propriedade é definida para o conteúdo . Clique na propriedade e alterar a propriedade Build Action para Embedded Resource .
  7. Repita as etapas 4 e 5 para o outro arquivo.
Na próxima vez que você criar o projeto, o compilador adiciona esses arquivos ao seu assembly. O compilador adiciona o namespace raiz do projeto ao nome do recurso quando ele é incluído no projeto. Por exemplo, se o namespace raiz do seu projeto for MyNamespace, os recursos são chamados MyNamespace.MyTextFile.txt e MyNamespace.MyImage.bmp.

Observação : os nomes de arquivo recurso são diferencia maiúsculas de minúsculas. Quando você acessa os recursos, você deve usar a ortografia exata e o caso do nome do arquivo. Se você não usar exatamente a ortografia e caso do nome de arquivo, a chamada de método para acessar o ManifestResourceStream retorna Nothing e o sistema não gera uma exceção.

Observação : se você deseja verificar os nomes dos recursos, você pode usar o Microsoft Intermediate Language Desassemblador (ILDASM) para exibir os dados manifesto, que lista os recursos incluídos.

Recursos de acesso

Para acessar os recursos que você tenha incorporado no manifesto do assembly, importar System.IO e namespaces System.Reflection , da seguinte maneira:
   using System.IO;
   using System.Reflection;
				
o namespace System.IO fornece a definição de um fluxo e o namespace System.Reflection define a classe do assembly que fornece métodos para acessar os recursos são incorporados em seu assembly.

Quando você declara o seguinte na área de declaração geral, os recursos do assembly são lidos quando o formulário é carregado:
   Assembly _assembly;
   Stream _imageStream;
   StreamReader _textStreamReader;
				
Observação : para acessar o evento Load para o formulário no Editor de código, clique duas vezes o formulário no Editor de design.

Para ler o recurso do assembly que está executando o código atual, você deve obter uma instância do assembly. Para fazer isso, use o método GetExecutingAssembly do assembly, da seguinte maneira:
   _assembly = Assembly.GetExecutingAssembly();
				
ler as informações do recurso para um fluxo é executada com uma chamada de método para GetManifestResourceStream . O parâmetro que é passado para esse método é o nome do recurso que deve ser acessado. Os dois recursos, em seguida, são lidos para seus fluxos correspondentes como o evento Load do formulário é executado.
   _imageStream = _assembly.GetManifestResourceStream("MyNameSpace.MyImage.bmp");
   _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNameSpace.MyTextFile.txt"));
				
o código no evento Load para o formulário semelhante à seguinte:
   try
   {
      _assembly = Assembly.GetExecutingAssembly();
      _imageStream = _assembly.GetManifestResourceStream("MyNamespace.MyImage.bmp");
      _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNamespace.MyTextFile.txt"));
   }
   catch
   {
      MessageBox.Show("Error accessing resources!");
   }
				
a instrução Try-Catch , conhecida como o tratamento de erros estruturado no. NET, é usada para capturar quaisquer erros que possam ter ocorrido enquanto a instância da classe assembly acessa os recursos.

Recursos de exibição

Este exemplo usa dois botões para exibir os recursos incorporados. Quando você clica no botão primeiro, uma imagem de bitmap que se baseia o recurso que é lido do assembly está criada e exibida no controle PictureBox do formulário. O segundo botão lê a partir de um recurso de texto e exibe o texto em uma caixa de texto.

Para exibir os recursos incorporados, execute estas etapas:
  1. Adicione um controle PictureBox ao formulário.
  2. Adicionar um novo controle Button ao formulário e altere sua propriedade Text para Show Image .
  3. Clique duas vezes o botão para abrir o evento Click no Visualizador de código e cole o código a seguir neste evento:
       try
       {
          pictureBox1.Image = new Bitmap(_imageStream);			       }
       catch 
       {
          MessageBox.Show("Error creating image!");
       }
    					
    este código gera uma nova instância de um bitmap que se baseia o fluxo de recurso que foi lido no evento Load do formulário.

  4. Adicione um controle TextBox ao formulário.
  5. Adicione outro controle de botão ao formulário e, em seguida, alterar sua propriedade Text para Obter texto .
  6. Clique duas vezes o botão no Editor de design para abrir o Click_Event do botão e, em seguida, cole o seguinte código no evento:
       try
       {
          if(_textStreamReader.Peek() != -1)
          {
             textBox1.Text = _textStreamReader.ReadLine();
          }
       }
       catch
       {
          MessageBox.Show("Error writing text!");
       }
    					
    este código determina se ainda existem caracteres a serem lidos no fluxo. Se forem encontrados caracteres, uma linha é lida para a caixa de texto.

  7. Pressione F5 para executar o aplicativo.

Código completo

   using System;
   using System.Drawing;
   using System.Collections;
   using System.ComponentModel;
   using System.Windows.Forms;
   using System.Data;

   using System.IO;
   using System.Reflection;

   namespace MyNamespace
   {
      /// <summary>
      /// Summary description for Form1.
      /// </summary>
      public class Form1 : System.Windows.Forms.Form
      {
         private System.Windows.Forms.PictureBox pictureBox1;
         private System.Windows.Forms.TextBox textBox1;
         private System.Windows.Forms.Button button1;
         private System.Windows.Forms.Button button2;
         /// <summary>
         /// Required designer variable.
         /// </summary>
         private System.ComponentModel.Container components = null;

         public Form1()
         {
            // 
            // Required for Windows Form Designer support.
            // 
            InitializeComponent();

            // 
            // TODO: Add any constructor code after InitializeComponent call.
            // 
         }

         /// <summary>
         /// Clean up any resources being used.
         /// </summary>
         protected override void Dispose( bool disposing )
         {
            if( disposing )
            {
               if (components != null) 
               {
                  components.Dispose();
               }
            }
            base.Dispose( disposing );
         }

      #region Windows Form Designer generated code
         /// <summary>
         /// Required method for Designer support - do not modify
         /// the contents of this method with the code editor.
         /// </summary>
         private void InitializeComponent()
         {
            this.pictureBox1 = new System.Windows.Forms.PictureBox();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.button1 = new System.Windows.Forms.Button();
            this.button2 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // pictureBox1
            // 
            this.pictureBox1.Location = new System.Drawing.Point(4, 8);
            this.pictureBox1.Name = "pictureBox1";
            this.pictureBox1.Size = new System.Drawing.Size(284, 192);
            this.pictureBox1.TabIndex = 0;
            this.pictureBox1.TabStop = false;
            // 
            // textBox1
            // 
            this.textBox1.Location = new System.Drawing.Point(92, 236);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(192, 20);
            this.textBox1.TabIndex = 1;
            this.textBox1.Text = "textBox1";
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(8, 208);
            this.button1.Name = "button1";
            this.button1.TabIndex = 2;
            this.button1.Text = "Show Image";
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // button2
            // 
            this.button2.Location = new System.Drawing.Point(8, 236);
            this.button2.Name = "button2";
            this.button2.TabIndex = 3;
            this.button2.Text = "Get Text";
            this.button2.Click += new System.EventHandler(this.button2_Click);
            // 
            // Form1
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(292, 266);
            this.Controls.AddRange(new System.Windows.Forms.Control[]{
                                                                     this.button2,
                                                                     this.button1,
                                                                     this.textBox1,
                                                                     this.pictureBox1});

            this.Name = "Form1";
            this.Text = "Form1";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.ResumeLayout(false);
         }
      #endregion

         Assembly _assembly;
         Stream _imageStream;
         StreamReader _textStreamReader;

         /// <summary>
         /// The main entry point for the application.
         /// </summary>
         [STAThread]
         static void Main() 
         {
            Application.Run(new Form1());
         }

         private void Form1_Load(object sender, System.EventArgs e)
         {
            try
            {
               _assembly = Assembly.GetExecutingAssembly();
               _imageStream = _assembly.GetManifestResourceStream("MyNamespace.MyImage.bmp");
              _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNamespace.MyTextFile.txt"));
            }
            catch
            {
               MessageBox.Show("Error accessing resources!");
            }		
         }

         private void button1_Click(object sender, System.EventArgs e)
         {
            try
            {
               pictureBox1.Image = new Bitmap(_imageStream);
            }
            catch 
            {
               MessageBox.Show("Error creating image!");
            }
         }

         private void button2_Click(object sender, System.EventArgs e)
         {
            try
            {
               if(_textStreamReader.Peek() != -1)
               {
                  textBox1.Text = _textStreamReader.ReadLine();
               }
            }
            catch
            {
               MessageBox.Show("Error writing text!");
            }		
         }
      }
   }
				
Observação O código deve ser alterado no Visual Studio 2005 ou no Visual Studio 2008. Quando você cria um projeto Windows Forms, translation from VPE for Csharp Visual adiciona um formulário para o projeto por padrão. Este formulário é denominado Form1. Os dois arquivos que representam o formulário são denominados Form1.cs e Form1.Designer.cs. Tem de escrever seu código no Form1.cs. O ficheiro Designer.cs é onde o Windows Forms Designer escreve o código que implementa todas as ações que você executou adicionando controles. Para obter mais informações sobre o Windows Forms Designer no Visual translation from VPE for Csharp 2005 ou no Visual Studio 2008, visite o seguinte site:
http://msdn2.microsoft.com/en-us/library/ms173077.aspx

Solução de problemas

Como os nomes de recursos são diferencia maiúsculas de minúsculas, verifique se você está usando a ortografia correta e caso dos recursos que são acessados. Você pode usar o ILDASM para ler os dados manifesto para verificar a ortografia exata dos recursos.

Referências

Para obter mais informações, consulte os seguintes sites da Microsoft Developer Network (MSDN):
System.Reflection Namespace
http://msdn2.microsoft.com/en-us/library/system.reflection(vs.71).aspx

Classe do assembly
http://msdn2.microsoft.com/en-us/library/system.reflection.assembly(vs.71).aspx

Método assembly.GetManifestResourceStream
http://msdn2.microsoft.com/en-us/library/system.reflection.assembly.getmanifestresourcestream(vs.71).aspx

Propriedades

ID do artigo: 319292 - Última revisão: terça-feira, 15 de julho de 2008 - Revisão: 3.1
A informação contida neste artigo aplica-se a:
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# 2008 Express Edition
Palavras-chave: 
kbmt kbsweptvs2008 kbhowtomaster KB319292 KbMtpt
Tradução automática
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: 319292

Submeter comentários

 

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