ProfileCommon в WAP работает во время выполнения, но не во время компиляции - PullRequest
3 голосов
/ 12 октября 2011

У меня есть проект веб-приложения и реализованные свойства профиля в файле web.config.Когда я обнаружил, что не могу получить доступ к объекту ProfileCommon, я погуглил и нашел несколько обходных путей:

И так далее.Но никто не сказал, что у меня есть объект 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 Ответ

1 голос
/ 17 октября 2011

ProfileCommon недоступен во время компиляции, потому что это класс, созданный при запуске приложения.Это связано со свойствами, которые вы можете определить внутри элемента профиля в web.config, чтобы их можно было динамически добавлять.См. Замечания в официальной документации .

...