1

継承してカスタム検証属性を実装しようとして、ValidationAttribute奇妙なものを見つけました。
私のカスタム属性には検証コンテキストが必要なので、ValidationAttributeのR#逆コンパイルされたソースを調べて、カスタム属性クラスでこれをオーバーライドする必要があることを確認しました。

public virtual bool RequiresValidationContext
{
  get
  {
    return false;
  }
}

楽しい部分です-VisualStudio2012ではそれができません。プロジェクトを実行しているときに、デバッグビューでそのプロパティを確認できますが、オーバーライドするプロパティはないということです。

興味深いのは、参照パスに次のように表示されていることです。

C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ System.ComponentModel.DataAnnotations.dll

しかし、R#では逆コンパイルされたファイルは別のパスです:

アセンブリの場所:C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ System.ComponentModel.DataAnnotations.dll

したがって、コンパイラは実行時とは異なるdllを使用します。だから、私は参照dllをR#が逆コンパイルするものに切り替えようとしましたが、VS2012はとにかくそれをそのバージョンに置き換えているようです、プロジェクトファイルでは次のようになります:

<Reference Include="System.ComponentModel.DataAnnotations" />

したがって、パスはプロジェクトに保存されません。プロジェクトを手動で編集せずにこれを解決する方法はありますか?

ところで、4.5 NETでは正常に動作します。つまり、RequiresValidationContextプロパティが想定どおりに表示されます。

更新:彼らが言うように、絵は千の言葉の価値があります:

ここに画像の説明を入力してください

4

1 に答える 1

1

解決策は単純です。プロパティRequiredValidationContextが.NET4.5のValidationAttributeに追加されました。C#4.0でコーディング/使用/開発しているので、.NET Framework 4.0をターゲットにしていて、そのバージョンではプロパティが存在しないと思われます。

したがって、プロパティをオーバーライドすることはできません。プロパティが存在しないためです。

于 2012-06-28T11:13:39.903 に答える