SharePoint 2007将母版页部署为功能停用时删除文件

SharePoint 2007将母版页部署为功能停用时删除文件,sharepoint,deployment,sharepoint-2007,master-pages,Sharepoint,Deployment,Sharepoint 2007,Master Pages,我有一个母版页,正在部署到SharePoint 2007服务器。我正在使用一个特性和一个wsp来进行部署。部署后,我的新母版页无法用于选择和使用我的站点。然后,如果我激活我的功能,我可以选择我的母版页。但是,当我停用我的功能(甚至收回解决方案并将其从SharePoint中删除)时,母版页仍可供选择,并且属于我的功能/解决方案的所有其他文件仍在SharePoint上。那么,当我的功能被停用时,有没有办法将母版页从可用状态中删除,然后如果它再次被激活,它是否可以再次使用 希望这有意义,谢谢。默认情况

我有一个母版页,正在部署到SharePoint 2007服务器。我正在使用一个特性和一个wsp来进行部署。部署后,我的新母版页无法用于选择和使用我的站点。然后,如果我激活我的功能,我可以选择我的母版页。但是,当我停用我的功能(甚至收回解决方案并将其从SharePoint中删除)时,母版页仍可供选择,并且属于我的功能/解决方案的所有其他文件仍在SharePoint上。那么,当我的功能被停用时,有没有办法将母版页从可用状态中删除,然后如果它再次被激活,它是否可以再次使用


希望这有意义,谢谢。

默认情况下,SharePoint不会清理作为功能激活一部分部署的文件

为了删除母版页和其他相关文件,您需要为功能编写功能接收器,实现FeatureDeactivating方法,并使用对象模型代码而不是CAML删除文件。功能接收器的MSDN文档是,这里有一些编写功能接收器代码的博客示例


请记住,要删除母版页,首先需要确保将网站集中所有网站的母版页重置为默认/其他可用母版页。您还需要注意不要删除母版页或页面布局之间共享的资源文件(CSS、图像等)。

默认情况下,SharePoint不会清理作为功能激活一部分部署的文件

为了删除母版页和其他相关文件,您需要为功能编写功能接收器,实现FeatureDeactivating方法,并使用对象模型代码而不是CAML删除文件。功能接收器的MSDN文档是,这里有一些编写功能接收器代码的博客示例


请记住,要删除母版页,首先需要确保将网站集中所有网站的母版页重置为默认/其他可用母版页。您还需要注意不要删除母版页或页面布局之间共享的资源文件(CSS、图像等)。

首先确保在功能停用时不再使用母版页。然后你可以移除它

SPWeb web = (SPWeb)properties.Feature.Parent;

string customMasterUrl = (new Uri(web.Url + "/_catalogs/masterpage/Sample.master")).AbsolutePath;

if (web.MasterUrl != customMasterUrl)
{
  try
  {
    SPFile file = web.GetFile(customMasterUrl);
    SPFolder masterPageGallery = file.ParentFolder;

    SPFolder temp = masterPageGallery.SubFolders.Add("Temp");
    file.MoveTo(temp.Url + "/" + file.Name);
    temp.Delete();
  }
  catch (ArgumentException)
  {
    return;
  }
}

首先,确保在功能停用中不再使用母版页。然后你可以移除它

SPWeb web = (SPWeb)properties.Feature.Parent;

string customMasterUrl = (new Uri(web.Url + "/_catalogs/masterpage/Sample.master")).AbsolutePath;

if (web.MasterUrl != customMasterUrl)
{
  try
  {
    SPFile file = web.GetFile(customMasterUrl);
    SPFolder masterPageGallery = file.ParentFolder;

    SPFolder temp = masterPageGallery.SubFolders.Add("Temp");
    file.MoveTo(temp.Url + "/" + file.Name);
    temp.Delete();
  }
  catch (ArgumentException)
  {
    return;
  }
}

谢谢,我想我可能不得不这么做,但我担心的是当我重新激活该功能时会发生什么。如果我重新激活该功能,文件会被放回去吗?是的,每次激活该功能时,文件都会被重新设置(除非它们已经存在)。但是请记住,如果您使用featureReceiver删除文件,那么任何修改(使用SharePoint Designer完成)都将丢失,感谢帮助人员。也许我可以使用上次修改的日期戳来帮助我决定是否应该使用FeatureReceiver删除文件。谢谢,我想我可能必须这样做,但我担心的是当我重新激活该功能时会发生什么。如果我重新激活该功能,文件会被放回去吗?是的,每次激活该功能时,文件都会被重新设置(除非它们已经存在)。但是请记住,如果您使用featureReceiver删除文件,那么任何修改(使用SharePoint Designer完成)都将丢失,感谢帮助人员。也许我可以使用上次修改的日期戳来帮助我决定是否应该使用FeatureReceiver删除文件。我知道这很旧,但如果你喜欢,请参阅下面的代码回答。。。我先把它移到另一个文件夹。我知道这是旧的,但如果你喜欢,请参阅下面的代码我的答案。。。我先把它移到另一个文件夹。