継承してカスタム検証属性を実装しようとして、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プロパティが想定どおりに表示されます。
更新:彼らが言うように、絵は千の言葉の価値があります: