I was asked to have a look at a Web Site project, and whether it could be converted into a Web Application project. So I created a web application project, copied and added all project files, and after a bit of editing (adding namespaces, etc.) I came across the error:
The type or namespace name ‘ProfileCommon’ could not be found (are you missing a using directive or an assembly reference?)
I soon found out that the class ProfileCommon is being automatically generated during the build process of a Web Site project, and in the meantime a VS BuildTask and a couple lines of code can be found on the internetz which replicate to original code generator.
To understand what it going on, I opened the original web site project, searched for a reference to ProfileCommon, and hit Go To Definition to retrieve the generated code.
As it turns out, the generator simply parses the configuration/system.web/profile/properties section of the web site’s web.config file.
Every item in the section contains a property definition in the form
<add name="[PropertyName]" defaultValue="[value]" type="[.Net Datatype]" />
From this information, the generator creates a public class like this:
using System; using System.Web; using System.Web.Profile;
public class ProfileCommon : System.Web.Profile.ProfileBase {
Each declared property is generated as
public virtual [Datatype] [PropertyName] { get { return (([Datatype)(this.GetPropertyValue("[PropertyName]"))); } set { this.SetPropertyValue("[PropertyName]", value); } }
and finally
public virtual ProfileCommon GetProfile(string username) { return ((ProfileCommon)(ProfileBase.Create(username))); } }
My guess is that the ProfileBase.GetPropertyValue() method also evaluates the defaultValue clause somehow, but MSDN does not mention this question.