3

Webアプリケーションプロジェクトがあり、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)を表示しました。ProfileCommonIntellisenseは機能しませんでしたが、オブジェクトを検査でき、両方のプロファイルプロパティが定義されていることがわかりました。

カスタムクラス以外の唯一の方法である場合は、ハードコードされたプロファイルプロパティ名を使用してもかまいませんが、クラスがコンパイル時ではなく実行時に使用できるProfileCommon理由を説明したいと思います。ProfileCommon

4

1 に答える 1

1

ProfileCommonは、アプリケーションの起動時に作成されるクラスであるため、コンパイル時には使用できません。これは、web.configのprofile要素内で定義できるプロパティが原因で、動的に追加できます。公式ドキュメントの備考を参照してください。

于 2011-10-17T08:41:31.530 に答える