6

.Net には、アセンブリをコピーしてファイルのロックを保持するための ShadowCopy 機能があります。次の 2 つのプロパティがあります。

  1. AppDomain.ShadowCopyFilesAppDomainSetup を使用する
  2. AppDomainSetup.ShadowCopyFilesそれを内部に保存しますstring[]

AppDomainSetupstring Value[]構成を保存するために使用されるフィールドがあります。私にとって奇妙なことはAppDomainSetup.ShadowCopyFiles、それが文字列プロパティであり、実際の型の代わりに"true"orを設定する必要があることです。"false"bool

のそのプロパティの実装は次のAppDomainSetupとおりです。

public string ShadowCopyFiles
{
  get
  {
    return this.Value[8];
  }
  set
  {
    if (value != null && string.Compare(value, "true", StringComparison.OrdinalIgnoreCase) == 0)
      this.Value[8] = value;
    else
      this.Value[8] = (string) null;
  }
}

AppDomain.ShadowCopyFiles の実装は次のとおりです。

public bool ShadowCopyFiles 
{ 
    get {
        String s = FusionStore.ShadowCopyFiles; 
        if((s != null) &&
           (String.Compare(s, "true", StringComparison.OrdinalIgnoreCase) == 0))
            return true;
        else 
            return false;
    } 
} 

しかし、なぜAppDomainSetupこのプロパティにはstring? boolMicrosoft が のような変換ロジックを使用しなかったのはなぜAppDomain.ShadowCopyFilesですか?

このような少し臭いコードが にあるのは奇妙でAppDomainSetup、私が行方不明になっている本当の理由があるのではないかと考えていました。

4

1 に答える 1

9

これは .NET の初期バージョンの誤りであり、MS は既存のコードを壊す可能性があるため、修正しないことを決定しました。

このリンクを参照してください。

http://connect.microsoft.com/VisualStudio/feedback/details/295269/appdomainsetup-shadowcopyfiles-should-be-of-the-type-bool-instead-of-string

于 2013-12-30T00:19:40.423 に答える