.Net 中具有 ShadowCopy 功能,可通过复制程序集来保留文件锁定。有两个属性:
- 使用 AppDomainSetup 的
AppDomain.ShadowCopyFiles
- 将其存储在内部
string[]
中的AppDomainSetup.ShadowCopyFiles
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
?为什么Microsoft没有像AppDomain.ShadowCopyFiles
那样使用一些bool
转换逻辑?
这么臭的代码位于AppDomainSetup
,我只是在想我失踪的真正原因是什么?
.NET的早期版本中这是一个错误,MS决定不修复它,因为它会破坏现有代码。
请参阅此链接。
http://connect.microsoft.com/VisualStudio/feedback/details/295269/appdomainsetup-shadowcopyfiles-should-be-of-the-type-bool-instead-of-string