.NET中有卷影复制功能,可以通过复制程序集来保留文件锁定。
有两个属性:
AppDomain.ShadowCopyFiles使用appdomainsetup
AppDomainSetup.ShadowCopyFiles存储在内部string[]
AppDomainSetup具有用于存储配置的string Value[]字段。奇怪的是AppDomainSetup.ShadowCopyFiles是一个字符串属性,我们需要设置"true""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?为什么微软没有像bool中那样使用一些AppDomain.ShadowCopyFiles转换逻辑?
奇怪的是,在AppDomainSetup中发现了这么一个有点臭的代码,而我只是在想,我丢失这些代码的真正原因是什么?

最佳答案

这是.NET早期版本中的一个错误,微软决定不修复它,因为它会破坏现有代码。
请参阅此链接。
http://connect.microsoft.com/VisualStudio/feedback/details/295269/appdomainsetup-shadowcopyfiles-should-be-of-the-type-bool-instead-of-string

08-24 19:14