ID do artigo: 911721 - Última revisão: segunda-feira, 13 de março de 2006 - Revisão: 1.1

Você pode não ser capaz de acessar a propriedade pública em tempo de execução, e você pode receber uma mensagem de erro em um aplicativo baseado no ASP.NET 2.0

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Recolher tudo

Sintomas

Considere o seguinte cenário. Em um aplicativo baseado no Microsoft ASP.NET 2.0, uma página da Web contém um objeto de controle de usuário do Microsoft Windows Forms. Você usa JavaScript para tentar acessar as propriedades deste objeto de controle de usuário do Windows Forms. Nesse cenário, talvez não seja capaz de acessar a propriedade pública em tempo de execução. Além disso, você receberá a seguinte mensagem de erro exceção:
Consulte o final desta mensagem, em vez dessa caixa de diálogo, para obter detalhes sobre invocar a depuração just-in-time (JIT).
Texto de exceção ************** **************
System.Security.SecurityException: Solicitação de permissão do tipo ' System.Security.Permissions.SecurityPermission, mscorlib, versão = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089 ' falhou. at System.Windows.Forms.SafeNativeMethods.IFont.GetHFont() at System.Windows.Forms.Control.ActiveXImpl.get_AmbientFont() at System.Windows.Forms.Control.get_Font() at System.Windows.Forms.Control.GetParentFont() at System.Windows.Forms.Control.get_Font() at System.Windows.Forms.ButtonInternal.ButtonBaseAdapter.CommonLayout() at System.Windows.Forms.ButtonInternal.ButtonStandardAdapter.PaintWorker(PaintEventArgs e, Boolean up, CheckState state) at System.Windows.Forms.ButtonInternal.ButtonStandardAdapter.PaintUp(PaintEventArgs e, CheckState state) at System.Windows.Forms.ButtonInternal.ButtonStandardAdapter.PaintOver(PaintEventArgs e, CheckState state) at System.Windows.Forms.ButtonInternal.ButtonBaseAdapter.Paint(PaintEventArgs pevent) at System.Windows.Forms.ButtonBase.OnPaint(PaintEventArgs pevent) at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs) at System.Windows.Forms.Control.WmPaint(Message& m) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ButtonBase.WndProc(Message& m) at System.Windows.Forms.Button.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
A ação que falhou foi:
Por demanda
O tipo da primeira permissão que falhou era: System.Security.Permissions.SecurityPermission
Assemblies ************** carregado **************
mscorlib
Versão do assembly: 2.0.0.0
Versão do Win32: 2.0.50215.44 (beta2.050215 4400)
CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50215/mscorlib.dll
----------------------------------------
Sistema
Versão do assembly: 2.0.0.0
Versão do Win32: 2.0.50215.44 (beta2.050215 4400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
SmartClient
Versão do assembly: 1.0.1928.26893
Versão do Win32: n/d
CodeBase: http://localhost:1156/SmartClientTestWeb/SmartClient.dll
----------------------------------------
System.Windows.Forms
Versão do assembly: 2.0.0.0
Versão do Win32: 2.0.50215.44 (beta2.050215 4400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
Versão do assembly: 2.0.0.0
Versão do Win32: 2.0.50215.44 (beta2.050215 4400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
Microsoft.Mshtml
Versão do assembly: 7.0.3300.0
Versão do Win32: 7.0.3300.0
CodeBase: file:///C:/WINDOWS/assembly/GAC/Microsoft.mshtml/7.0.3300.0__b03f5f7f11d50a3a/Microsoft.mshtml.dll
----------------------------------------
Depuração JIT ************** **************
Para habilitar a depuração just-in-time (JIT), o arquivo .config deste aplicativo ou computador (machine.config) deve ter o valor jitDebugging definido na seção system.windows.forms. O aplicativo também deve ser compilado com depuração habilitada.
Por exemplo:
<configuration> < system.windows.forms jitDebugging = "true" / > </configuration>
Quando depuração JIT estiver ativada, qualquer exceção não tratada será ser enviada para o depurador JIT registrado no computador em vez ser tratada por esta caixa de diálogo.
Observação Esse problema não ocorre no Microsoft .NET Framework 1.1.

Causa

Esse problema ocorre porque a classe base UserControl contém o atributo a seguir.
ComVisible(false)

Como Contornar

Para contornar esse problema, adicione o atributo a seguir à classe UserControl .
ComVisible(true)

Mais Informações

Etapas para reproduzir o problema

  1. Inicie o Microsoft Visual Studio 2005.
  2. No menu arquivo , clique em New Web Site .
  3. Na lista Templates , clique em ASP.NET Web Site .
  4. Na caixa Location , digite DriveLetter:\Path\KB911721.
  5. Na lista Language , clique em translation from VPE for Csharp Visual e, em seguida, clique em OK .
  6. No Solution Explorer, clique com o botão direito do mouse em default.aspx e, em seguida, clique em Abrir .
  7. Substitua o código existente com o código a seguir.
    <%@ Page Language="C#" CodeFile="Default.aspx.cs" Inherits="_Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Untitled Page</title>
        <script language=javascript>
            function TestData()
            {
                alert('Test1');
                form1.TestControl.TestProperty = "gomusin";
                alert(form1.TestControl.TestProperty);
            }
            
            function TestData1()
            {
                alert('Test2');
                var sData = form1.TestControl.TestProperty;
                alert(sData);
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <object id="TestControl" classid="SmartClient.dll#SmartClient.UserControl1" VIEWASTEXT>
            </object>
            <input id="Button2" type="button" value="Property Read" style="width: 165px" onclick="javascript:TestData1()" />
            <input id="Button1" type="button" value="Property Write" style="width: 168px" onclick="javascript:TestData()"/>
    </div>
        </form>
    </body>
    </html>
  8. No menu arquivo , clique em Adicionar e, em seguida, clique em New Project .
  9. Na lista Templates , clique em Windows Control Library .
  10. Na caixa nome , digite SmartClient.
  11. Na caixa Location , digite DriveLetter:\Path e, em seguida, clique em OK .
  12. No designer do código para o arquivo UserControl1.Designer.cs, substitua o código existente com o código a seguir. namespace
    namespace SmartClient
    {
        partial class UserControl1
        {
            /// <summary>
            /// Required designer variable.
            /// </summary>
            private System.ComponentModel.IContainer components = null;
    
            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
    
            #region Component 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.button1 = new System.Windows.Forms.Button();
                this.button2 = new System.Windows.Forms.Button();
                this.textBox1 = new System.Windows.Forms.TextBox();
                this.SuspendLayout();
                // 
                // button1
                // 
                this.button1.Location = new System.Drawing.Point(7, 90);
                this.button1.Name = "button1";
                this.button1.Size = new System.Drawing.Size(126, 23);
                this.button1.TabIndex = 0;
                this.button1.Text = "property Read";
                this.button1.Click += new System.EventHandler(button1_Click);
                // 
                // button2
                // 
                this.button2.Location = new System.Drawing.Point(146, 90);
                this.button2.Name = "button2";
                this.button2.Size = new System.Drawing.Size(127, 23);
                this.button2.TabIndex = 1;
                this.button2.Text = "property Write";
                this.button2.Click += new System.EventHandler(button2_Click);
                // 
                // textBox1
                // 
                this.textBox1.Location = new System.Drawing.Point(22, 25);
                this.textBox1.Name = "textBox1";
                this.textBox1.Size = new System.Drawing.Size(232, 21);
                this.textBox1.TabIndex = 2;
                // 
                // UserControl1
                // 
                this.Controls.Add(this.textBox1);
                this.Controls.Add(this.button2);
                this.Controls.Add(this.button1);
                this.Name = "UserControl1";
                this.Size = new System.Drawing.Size(276, 123);
                this.ResumeLayout(false);
                this.PerformLayout();
    
            }
    
            #endregion
    
            private System.Windows.Forms.Button button1;
            private System.Windows.Forms.Button button2;
            private System.Windows.Forms.TextBox textBox1;
        }
    }
  13. No Solution Explorer, clique com o botão direito do mouse UserControl1.cs e, em seguida, clique em View Code .
  14. Substitua o código existente do aplicativo com o código a seguir.
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Text;
    using System.Windows.Forms;
    
    namespace SmartClient
    {
      public partial class UserControl1 : UserControl
      {
        public UserControl1()
        {
          InitializeComponent();
        }
    
        String TestProperty = "something";
    
        void button2_Click(object sender, System.EventArgs e)
        {
          textBox1.Text = TestProperty;
        }
    
        void button1_Click(object sender, System.EventArgs e)
        {
          TestProperty = textBox1.Text;
        }
      }
    }
  15. No menu Debug , clique em Iniciar a depuração .

    Observação Após você clicar em qualquer botão, você percebe o problema mencionado na seção "Sintomas".
Os produtos de terceiros mencionados neste artigo são fabricados por empresas que são independentes da Microsoft. A Microsoft não oferece garantia, implícita ou não, em relação ao desempenho ou à confiabilidade desses produtos.

A informação contida neste artigo aplica-se a:
  • Microsoft ASP.NET 2.0
Palavras-chave: 
kbmt kbtshoot kbprb KB911721 KbMtpt
Tradução automáticaTraduçã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: 911721  (http://support.microsoft.com/kb/911721/en-us/ )
Retired KB ArticleAviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.