Se lavorate con i content type all'interno delle vostre soluzioni di provisioning su SharePoint, vi sarà capitato di non riuscire più a cancellare un content type rimasto "orfano" dalle tante operazioni di deployment e retract che avrete fatto durante la fase di sviluppo e test.
Ho usato il termine "orfano" poichè normalmente è corretto che SharePoint ci vieti di cancellare un content type (dai site settings del nostro sito) se questo è ancora in uso, ma molto spesso può capitare che l'operazione di cancellazione venga comunque vietata anche se siete sicuri al 100% che il vostro content type non è più in uso su nessuna lista o document library (per essere sicuri, fate riferimento a questo post).
Nello specifico, il messaggio d'errore che viene visualizzato dall'interfaccia o all'interno del log di SharePoint è il seguente:

The content type "NOME DEL VOSTRO CONTENT TYPE" is part of an application feature. at Microsoft.SharePoint.SPContentTypeCollection.DeleteFromWeb(SPContentTypeId id, String strName)
at Microsoft.SharePoint.SPContentTypeCollection.Delete(SPContentTypeId id)
at Microsoft.SharePoint.SPContentType.Delete()
at Microsoft.SharePoint.ApplicationPages.ManageContentTypePage.DeleteContentType()
at Microsoft.SharePoint.ApplicationPages.ManageContentTypePage.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Per prima cosa dobbiamo controllare se sono presenti all'interno del recycle bin una o più liste che utilizzavano il content type in questione e che magari abbiamo deciso di cancellare. Quindi, svuotiamo il cestino di SharePoint da queste liste e proviamo ad eliminare di nuovo il content type.

Se ci viene ritornato ancora l'errore descritto sopra, possiamo considerare il content type come "orfano" e possiamo procedere alla sua cancellazione. Per compiere questa operazione bisogna sporcarsi un pò le mani e modificare direttamente il database dei contenuti della vostra web application SharePoint.
So bene che vi consiglio sempre di NON modificare a mano il database di SharePoint ed utilizzare il modello ad oggetti, ma purtroppo in questo caso è proprio necessario, perchè non esiste altro modo di poter cancellare il content type da cui scaturisce l'errore, ne utilizzando SharePoint Designer ne uno dei modelli ad oggetti disponibili (server, client o web services).

Apriamo quindi SQL Management Studio, selezioniamo il database di contenuto relativo alla web application in cui abbiamo riscontrato l'errore e scegliamo di effettuare una nuova query. Questa serve per controllare la presenza effettiva del nostro content type, tramite il suo identificativo.

SELECT *  FROM [NOME DATABASE].[dbo].[ContentTypes] 

WHERE (sys.fn_varbintohexstr(ContentTypeId) LIKE 'VOSTRO CONTENT TYPE ID%')

Così facendo riuscirete a recuperare la riga corrispondente alla definizione del vostro content type. Da notare è il campo IsFromFeature, che sarà sicuramente valorizzato a "1".

Per risolvere quindi il problema originale di cancellazione del content type, basta settare il valore di quel campo a "0" tramite una normalissima query di update.

Update [NOME DATABASE].[dbo].[ContentTypes] 

SET [IsFromFeature] = 0
WHERE (sys.fn_varbintohexstr(ContentTypeId) LIKE 'VOSTRO CONTENT TYPE ID%')

Fatto questo update, sarete così in grando di cancellare il content type orfano.

MI RACCOMANDO, utilizzate questa tecnica solo se siete sicuri al 100% che il vostro content type non ha più alcuna referenza su nessuna lista all'intenro della vostra site collection (per fare questo controllo, fate sempre riferimento a questo post).