Mensaje de error cuando ASP.NET 2.0 está configurado para ejecutarse con una cuenta de usuario: "No se puede generar una clase temporal"


Síntomas


Imagine la siguiente situación:
  • Crear una aplicación de Microsoft ASP.NET 2.0.
  • ASP.NET 2.0 está configurado para ejecutarse con una cuenta de usuario.
  • Se establece el atributo SerializeAs de la propiedad de perfil de ASP.NET 2.0 en Xml.
En este caso, ASP.NET 2.0 no se puede guardar el perfil de usuario y puede recibir un mensaje de error similar al siguiente:
[InvalidOperationException: no se puede generar una clase temporal (resultado = 1) .error del CS2001: archivo de código fuente 'D:\WINDOWS\TEMP\d0lurtzx.0.cs' no pudo founderror del CS2008: No se especificaron entradas

Causa


Este problema se produce si la cuenta de usuario no dispone de la lista contenido de la carpeta y los permisos de lectura en la carpeta %windir%\Temp.

Resolución


Para resolver este problema, conceda a la cuenta de usuario la lista contenido de la carpeta y los permisos de lectura en la carpeta %windir%\Temp.

Más información


Pasos para reproducir el problema

  1. Crear un sitio Web en Microsoft Internet Information Services (IIS) Manager.
  2. Crear una cuenta de usuario local de Microsoft Windows NT.
  3. Haga clic en Inicio y en Ejecutar, escriba cmd y, por último, haga clic en Aceptar.
  4. En el símbolo del sistema, escriba el comando siguiente:
    ruta de acceso del CD
    Nota: Ruta representa la ruta de acceso de la carpeta de Microsoft.NET Framework 2.0 en el equipo.
  5. En el símbolo del sistema, escriba el comando siguiente y presione ENTRAR:
    usuario de aspnet_regiis - ga
    Nota: Usuario representa la cuenta de usuario que creó en el paso 2.
  6. Cambiar la identidad del grupo de aplicaciones para el sitio Web que creó en el paso 1 a la cuenta que creó en el paso 2.
  7. Haga clic en Inicio y en Ejecutar, escriba cmd y, por último, haga clic en Aceptar.
  8. En el símbolo del sistema, escriba iisreset /restarty, a continuación, presione ENTRAR.
  9. Crear un archivo Web.config y, a continuación, agregue el ejemplo de código siguiente al archivo Web.config. Nota: < server > representa el nombre del servidor, < usuario > representa el nombre de usuario,< contraseña > representa la contraseña para el usuario y< catálogo > representa el nombre del catálogo.
    <?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. Cree un archivo denominado Login.aspx y, a continuación, agregue el siguiente ejemplo de código para el archivo Login.aspx.
    <%@ 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. Cree un archivo denominado Test.aspx y, a continuación, agregue el siguiente ejemplo de código para el archivo Test.aspx.
    <%@ 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. Solicitar Test.aspx.