アクティブ化時にサイト コレクション内のすべてのサイトにカスタム マスター ページを展開する機能があり、非アクティブ化時にカスタム マスター ページのすべてのトレースを削除したいと考えています。非アクティブ化時に、サイトの masterpage を v4.master に戻した後、以前に既定として設定されていたカスタム マスター ページを削除しようとすると、エラー (ファイル "custom.master" を削除できません。エラー コード: 158.) が発生します。エラーの後、機能の非アクティブ化は完了しませんが、ほとんどのファイルは削除され、ブランディングはすでに v4.master に設定されています。この機能を再度無効にしようとすると、最終的なファイル custom.master がエラーなしで削除されます。
何が欠けているのかわかりません。custom.master を削除する前に FeatureDeactivating() を終了する必要があるのはなぜですか?
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
using (SPSite sitecollection = (SPSite)properties.Feature.Parent)
{
using (SPWeb web = sitecollection.RootWeb)
{
string WebAppRelativePath = sitecollection.ServerRelativeUrl;
if (!WebAppRelativePath.EndsWith("/"))
{
WebAppRelativePath += "/";
}
foreach (SPWeb site in sitecollection.AllWebs)
{
site.CustomMasterUrl = WebAppRelativePath + "_catalogs/masterpage/custom.master";
site.MasterUrl = WebAppRelativePath + "_catalogs/masterpage/custom.master";
site.UIVersion = 4;
site.Update();
}
}
}
}
public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
using (SPSite sitecollection = (SPSite)properties.Feature.Parent)
{
using (SPWeb web = sitecollection.RootWeb)
{
string WebAppRelativePath = sitecollection.ServerRelativeUrl;
if (!WebAppRelativePath.EndsWith("/"))
{
WebAppRelativePath += "/";
}
foreach (SPWeb site in sitecollection.AllWebs)
{
site.CustomMasterUrl = WebAppRelativePath + "_catalogs/masterpage/v4.master";
site.MasterUrl = WebAppRelativePath + "_catalogs/masterpage/v4.master";
site.UIVersion = 4;
site.Update();
WebAppRelativePath = site.Url;
if (!WebAppRelativePath.EndsWith("/"))
{
WebAppRelativePath += "/";
}
SPFolder folder = web.GetFolder(site.Url + "_catalogs/masterpage/images/");
if (folder.Exists)
folder.Delete();
folder.Update();
SPFile file = web.GetFile(site.Url + "_catalogs/masterpage/custom.css");
if(file.Exists)
file.Delete();
file.Update();
file = web.GetFile(WebAppRelativePath + "_catalogs/masterpage/html5.master");
if(file.Exists)
file.Delete();
file.Update();
file = web.GetFile(WebAppRelativePath + "_catalogs/masterpage/custom.master");
if (file.Exists)
{
file.Delete(); // ERROR HAPPENS HERE
}
file.Update();
/*file = web.GetFile(WebAppRelativePath + "_catalogs/masterpage/minimal.master");
if(file.Exists)
file.Delete();
file = web.GetFile("/_layouts/minimal.master");
if(file.Exists)
file.CopyTo(WebAppRelativePath + "_catalogs/masterpage/");
file = web.GetFile(WebAppRelativePath + "_catalogs/masterpage/default.master");
if(file.Exists)
file.Delete();
file = web.GetFile("/_layouts/default.master");
if(file.Exists)
file.CopyTo(WebAppRelativePath + "_catalogs/masterpage/");*/
}
}
}
}