问题描述:
在测试环境上部署了一个包含ContentType的解决方案,VS2010修改内容后想重新部署,死活部署不上去了:
错误日志内容如下:
SPException thrown: Message: 在当前站点集或子网站中找到功能 {b7edbfe2-c02e-4560-b314-b23c7b049d10} 中定义的 ID 为 0x0100983A544EBE5040C28C797562907C29F2 的内容类型。. Stack: 在 Microsoft.SharePoint.Utilities.SPUtility.ThrowSPExceptionWithTraceTag(UInt32 tagId, ULSCat traceCategory, String resourceId, Object[] resourceArgs) 在 Microsoft.SharePoint.Administration.SPElementDefinitionCollection.ProvisionFieldsAndContentTypes
查了资料说是需要加入Overwrite=”True”,测试后发现如果首次部署的时候就加入Overwrite,那么后面的就没问题。
但是这个只针对最开始就加的有效,如果是报错后再加入,激活时会报的错误更恶心:
部署步骤“激活功能”中出现错误:
这位同志跟我遇到了同样的问题:http://www.go4answers.com/Example/missing-content-types-central-128297.aspx
解决方案:
最后结合以下两篇文章解决问题:
操作如下:
1.SQL查找到之前部署过的ContentType
SELECT [SiteId]
,[Class]
,[Scope]
,sys.fn_varbintohexstr([ContentTypeId]) as CT
,[Version]
,[NextChildByte]
,[Size]
,[Definition]
,[ResourceDir]
,[IsFromFeature]
FROM [WSS_Content].[dbo].[ContentTypes]
where (sys.fn_varbintohexstr(ContentTypeId) LIKE '0x0100983a544ebe5040c28c797562907c29f2%')
2.修改字段 IsFromFeature 为0
Update [WSS_Content].[dbo].[ContentTypes]
SET [isfromFeature]= 0
where (sys.fn_varbintohexstr(ContentTypeId) LIKE '0x0100983a544ebe5040c28c797562907c29f2%')
3.将不带Overwrite=”True”的解决方案重新部署一遍,这时候会报错,但ContentType已经部署上去了,到网站设置中找到部署的内容类型,删除掉:
4.再回SQL查询,结果已经为空
5.接下来,在VS2010中给ContentType添加Overwrite=”True”后重新部署,以后再部署解决方案应该就不会报错了
备注:加入Overwrite=”True”后,数据库表中的Definition字段里面有值,不知道系统是不是就是根据这个来判断是否可重写的