Artigo: 908158 - Última revisão: segunda-feira, 3 de Dezembro de 2007 - Revisão: 1.2

Mensagem de erro quando o ASP.NET 2.0 está configurado para ser executado com uma conta de utilizador: "Não é possível gerar uma classe temporária"

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 | Reduzir tudo

Sintomas

Considere o seguinte cenário:
  • Criar uma aplicação de Microsoft ASP.NET 2.0.
  • ASP.NET 2.0 está configurado para ser executado com uma conta de utilizador.
  • O atributo SerializeAs da propriedade de perfil no ASP.NET 2.0 é definido como XML .
Neste cenário, o ASP.NET 2.0 não poderá guardar o perfil de utilizador e, poderá receber uma mensagem de erro semelhante à seguinte:
[InvalidOperationException: não é possível gerar uma classe temporária (resultado = 1).
Erro CS2001: ficheiro de origem não foi possível encontrar 'D:\WINDOWS\TEMP\d0lurtzx.0.cs'
Erro CS2008: sem entradas especificadas

Causa

Este problema ocorre se a conta de utilizador não tiver as permissões Ler e listar conteúdo das pastas na pasta %windir%\Temp.

Resolução

Para resolver este problema, conceda a conta de utilizador a lista de permissões de leitura e o conteúdo das pastas na pasta %windir%\Temp.

Mais Informação

Passos para reproduzir o problema

  1. Criar um Web site no Microsoft Internet Information Services (IIS) Manager.
  2. Crie uma conta de utilizador local do Microsoft Windows NT.
  3. Clique em Iniciar , clique em Executar , escreva cmd e, em seguida, clique em OK .
  4. Na linha de comandos, escreva o seguinte comando:
    CD Path
    Nota Path representa o caminho da pasta Microsoft .NET Framework 2.0 no computador.
  5. Na linha de comandos, escreva o seguinte comando e, em seguida, prima ENTER:
    aspnet_regiis - ga User
    Nota User representa a conta de utilizador que criou no passo 2.
  6. Altere a identidade do Web site que criou no passo 1 para a conta que criou no passo 2 do agrupamento de aplicações.
  7. Clique em Iniciar , clique em Executar , escreva cmd e, em seguida, clique em OK .
  8. Na linha de comandos, escreva iisreset /restart e, em seguida, prima ENTER.
  9. Criar um ficheiro Web.config e, em seguida, adicione o seguinte exemplo de código para o ficheiro Web.config.

    Nota <Server> representa o nome do servidor, <User> representa o nome de utilizador, <Password> representa a palavra-passe para o utilizador e <Catalog> represents the catalog name.
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.web>
        <customErrors mode="Off" />
        <profile defaultProvider="SqlPProvider" enabled="true">
          <providers>
            <add name="SqlPProvider" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=1.2.3400.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="SqlPProviderConnection" />
          </providers>
          <properties>
            <add name="FavoriteURLs" type="System.Collections.Specialized.StringCollection" readOnly="false" serializeAs="Xml" />
          </properties>
        </profile>
        <anonymousIdentification enabled="true" cookieless="UseDeviceProfile" />
        <authentication mode="Forms">
          <forms>
            <credentials passwordFormat="Clear">
              <user name="a" password="a" />
            </credentials>
          </forms>
        </authentication>
        <authorization>
          <deny users="?" />
        </authorization>
      </system.web>
      <connectionStrings>
        <add name="SqlPProviderConnection" connectionString="server=<Server> ;UID=<User>;PWD=<Password>;Initial Catalog=<Catalog>" />
      </connectionStrings>
    </configuration>
  10. Criar um ficheiro denominado Login.aspx e, em seguida, adicione o seguinte exemplo de código para o file.
    <%@ Page LANGUAGE="cs" %>
    <form runat=server>
    	<asp:literal runat=server id="MyText" Text=""></asp:literal>
    	<asp:TextBox runat=server id="UsernameTextBox" Text="Type a user name"></asp:TextBox>
    	<asp:TextBox runat=server id="PasswordTextBox" Text="Type a password"></asp:TextBox>
    	<asp:Button id="Submit"  Text="Submit" runat="server"/>
    </form>
    <script runat="server" >
    protected void Page_Load(Object source, EventArgs e)
      {
    	
    	MyText.Text += "[Login Page: you are not authenticated]<br>";
          String strUserName  = UsernameTextBox.Text;
          String strPassword  = PasswordTextBox.Text;
    
          bool   fPersist     = false;
          bool   fVerifed     = System.Web.Security.FormsAuthentication.Authenticate(strUserName, strPassword);
          if( fVerifed)
          {
              System.Web.Security.FormsAuthentication.RedirectFromLoginPage(strUserName, fPersist);
          }
      }
    
    </script>
  11. Create a file that is named Test.aspx, and then add the following code example to the Test.aspx file.
    <%@ Page LANGUAGE="cs" Debug="true" %>
    <form runat="server">
    	<asp:Literal runat="server" id="Literal1" Text=""></asp:literal>
    	<asp:Button text="Signout" OnClick="Signout_Click" id="SignOutButton" runat=server/>
    </form>
    <script runat="server" >
    void Page_Load(object sender, EventArgs e) 
    {
    
    	Literal1.Text += "[User.Identity.Name=" + User.Identity.Name +"]<br>";
    	Profile.FavoriteURLs = new System.Collections.Specialized.StringCollection();
    	Profile.FavoriteURLs.Add("MyString1");
    	Profile.FavoriteURLs.Add("MyString2");
    	Profile.FavoriteURLs.Add("MyString3");
    
    
    	if (Profile.FavoriteURLs != null) {
    		for (int i=0; i<Profile.FavoriteURLs.Count; i++) {
    			Literal1.Text += "[FavoriteURLs=" + Profile.FavoriteURLs[i] + "]<br>";
    		}
    	}
    	
    }
    
    
    void Signout_Click(Object sender, EventArgs E) {  
        System.Web.Security.FormsAuthentication.SignOut();
        Response.Redirect(System.Web.Security.FormsAuthentication.LoginUrl);
    }
    </script>
  12. Pedir Test.aspx.

A informação contida neste artigo aplica-se a:
  • Microsoft .NET Framework 2.0
Palavras-chave: 
kbmt kbtshoot kberrmsg kbcode kbprb KB908158 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 908158  (http://support.microsoft.com/kb/908158/en-us/ )