Feilmelding når ASP.NET 2.0 er konfigurert til å kjøre med en brukerkonto: "Kan ikke generere en midlertidig klasse"


Symptomer


Tenk deg følgende:
  • Du oppretter en Microsoft ASP.NET 2.0-program.
  • ASP.NET 2.0 er konfigurert til å kjøre med en brukerkonto.
  • SerializeAs -attributtet for profilegenskap i ASP.NET 2.0 er satt til Xml.
I dette scenariet ASP.NET 2.0 kan ikke lagre profilen, og du kan få en feilmelding som ligner på følgende:
[InvalidOperationException: kan ikke generere en midlertidig klasse (resultat = 1) .error CS2001: kildefilen 'D:\WINDOWS\TEMP\d0lurtzx.0.cs' kan ikke være founderror CS2008: ingen inndata angitt

Årsak


Dette problemet oppstår hvis brukerkontoen ikke har vise mappeinnhold og lesetillatelser for %windir%\Temp-mappen.

Løsning


Hvis du vil løse dette problemet, kan du gi brukerkontoen vise mappeinnhold og lesetillatelser for %windir%\Temp-mappen.

Mer informasjon


Fremgangsmåte for å gjenskape problemet

  1. Opprette et webområde i Microsoft Internet Information Services (IIS) Manager.
  2. Opprette en lokal Microsoft Windows NT-brukerkonto.
  3. Klikk Start, klikk Kjør, Skriv inn cmd, og klikk deretter OK.
  4. Skriv inn følgende kommando ved ledeteksten:
    CD- bane
    Obs!Banen representerer banen til Microsoft .NET Framework 2.0-mappen på datamaskinen.
  5. Ved ledeteksten skriver du inn følgende kommando og trykker ENTER:
    aspnet_regiis - gabrukeren
    Obs!Bruker representerer brukerkontoen som du opprettet i trinn 2.
  6. Endre programutvalgsidentiteten for Web-området som du opprettet i trinn 1 til kontoen du opprettet i trinn 2.
  7. Klikk Start, klikk Kjør, Skriv inn cmd, og klikk deretter OK.
  8. Ved ledeteksten, Skriv inn iisreset/restart, og trykk deretter ENTER.
  9. Opprett en Web.config-fil, og legg deretter til følgende kodeeksempel til i filen Web.config. Obs!< server > representerer navnet på serveren, < bruker > representerer brukernavnet på,< passord > representerer passordet for brukeren og< katalogen > representerer katalognavnet på.
    <?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. Opprette en fil som heter Login.aspx, og legg deretter til følgende kodeeksempel til Login.aspx-filen.
    <%@ 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. Opprette en fil som heter Test.aspx, og legg deretter til følgende kodeeksempel til Test.aspx-filen.
    <%@ 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. Be om Test.aspx.