墨色风雨
2018-04-13 14:20:19浏览 2122
1.如何在web application中正确使用Profile
web application与website的一个不同之处在于,web application中无法象website中那样,直接用类似Label1.Text = Profile.XXX;这样的方式引用Profile(编译会直接报错)
解决办法有二种:
(1)
读取Profile值的代码改为:
1HttpContext.Current.Profile.GetProfileGroup("GroupName").GetPropertyValue("PropertyName"); //Profile有分组的情况
2HttpContext.Current.Profile.GetPropertyValue("GroupName.PropertyName"); //Profile有分组情况的另一种写法
3HttpContext.Current.Profile.GetPropertyValue("PropertyName"); //Profile无分组的情况 修改Profile值的代码改为:
1HttpContext.Current.Profile.SetPropertyValue("GroupName.PropertyName", "Value"); //有分组情况
2HttpContext.Current.Profile.SetPropertyValue("PropertyName", "Value"); //无分组情况保存
HttpContext.Current.Profile.Save();缺点:这样虽然可以读取/修改/保存Profile,但这种写法把Profile降级为弱类型了,在vs.net开发环境中也失去了代码提示自动感知的能力
(2)推荐使用!利用Web Profile Builder生成强类型的Profile
步骤:
a.先到http://code.msdn.microsoft.com/WebProfileBuilder/Release/ProjectReleases.aspx?ReleaseId=674 这里下载这个免费的开源小插件,并安装
b.修改web.config文件,首先增加一个节点
<sectionGroup name="robo.webProfile">
<section name="webProfileSettings" type="WebProfileBuilder.WebProfileConfigurationSection, WebProfileBuilder, Version=1.1.0.0, Culture=neutral, PublicKeyToken=01d50f1f82943b0c" allowLocation="true" allowDefinition="Everywhere"/>
</sectionGroup>
把这一段复制到<configSections>这一行的后面,即
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="robo.webProfile">
<section name="webProfileSettings" type="WebProfileBuilder.WebProfileConfigurationSection, WebProfileBuilder, Version=1.1.0.0, Culture=neutral, PublicKeyToken=01d50f1f82943b0c" allowLocation="true" allowDefinition="Everywhere"/>
</sectionGroup>
然后再把
<robo.webProfile>
<webProfileSettings className="CntvsWebProfile" directory="App_Code" fileName="CntvsWebProfile"/>
</robo.webProfile>
复制到</configSections>的下面,即
</configSections>
<robo.webProfile>
<webProfileSettings className="CntvsWebProfile" directory="App_Code" fileName="CntvsWebProfile"/>
</robo.webProfile>
稍微解释一下,这一段告诉编译器,将在App_Code目录下生成一个CntvsWebProfile.cs的文件,类名为CntvsWebProfile(当然还可以指定namespace,具体可以参看WebProfileBuilder的sample),注意App_Code如果不存在将生成失败,另外最好在App_Code目录下,事先新建一个空的CntvsWebProfile.cs,否则好象也容易造成失败
c.关键!!!:修改项目文件xxx.csproj
退出vs.net,用记录本打开项目文件,找到
<Import Project="(MSBuildBinPath)\Microsoft.CSharp.targets"/><ImportProject="