WAP中的ProfileCommon在运行时工作但在编译时不工作

时间:2011-10-12 13:31:00

标签: c# asp.net-profiles compile-time

我有一个Web应用程序项目,并在web.config中实现了配置文件属性。当我发现我无法访问ProfileCommon对象时,我用Google搜索并找到了一些解决方法:

等等。但没有人说我在运行时有ProfileCommon个对象。这是我的例子:

<profile enabled="true">
  <properties>
    <add name="AdminRemark"/>
    <add name="FacilityID" type="System.Int64" defaultValue="1"/>
  </properties>
</profile>

此行编译良好且有效,但我有硬编码的属性名称:

rcbFacilityID.SelectedValue = 
    (ProfileBase.Create(userCurrent.UserName) as ProfileBase)
    .GetPropertyValue("FacilityID").ToString();

但是这行不编译并给出错误:找不到类型或命名空间名称'ProfileCommon'(你是否缺少using指令或程序集引用?):)

rcbFacilityID.SelectedValue = 
    (ProfileBase.Create(userCurrent.UserName) as ProfileCommon)
    .FacilityID.ToString();

但是在运行时我试图在Visual Studio Watch窗口中执行该行,它工作正常!如果没有演员,该事件会将ProfileBase.Create(userCurrent.UserName)的类型显示为ProfileCommon。 Intellisense不起作用,但是可以检查对象,我看到它定义了两个配置文件属性。

我不介意使用硬编码的配置文件属性名称,如果除了自定义ProfileCommon类之外它是唯一的方法,但我想解释为什么ProfileCommon类在运行时可用时间而不是编译时间?

1 个答案:

答案 0 :(得分:1)

ProfileCommon在编译时不可用,因为它是在启动应用程序时创建的类。这是由于您可以在web.config中的profile元素内定义的属性,因此可以动态添加它们。 请参阅official documentation中的评论。