In einem aktuellen Projekt wurden von uns Controls für die veränderte Darstellung der SharePoint 2010 Navigation entwickelt. Diese Controls wurde per Delegate Methode in die Vorhandene MasterPage eingefügt.
Damit dieses Verfahren funktioniert, müssen die Controls in der web.config der SharePoint Webanwendung als “sicher” registriert werden. Dazu ist der Knoten “SafeControls” unterhalb von “SharePoint” vorgesehen. Dort werden die Angaben zu Assembly, Namespace und Klasse des Controls hinterlegt.
Dieses Vorgehen wird von Visual Studio bei der Erstellung eines Webpart automatisch unterstützt, der entsprechende Eintrag in der Manifest-Datei der Solution wird automatisch erstellt. Für selbst erstellte Controls gilt dies allerdings nicht. Um nun solch einen Eintrag manuell zu erzeugen, hat man 2 Möglichkeiten:
- Manuelle Anpassung der Manifest-Datei
- Von Visual Studio verwaltete Anpassung der Manifest-Datei
Die erste Variante hat den Nachteil, dass die manuellen Änderungen verloren gehen, wenn die Manifest-Datei neu autogeneriert werden soll. Das führt zu mehr Wartungsaufwand und Fehleranfälligkeit.
Ich betrachte daher den zweiten und aus meiner Sicht besseren Ansatz und zeige nun, wie man per Einstellung in Visual Studio einen Safe Control Eintrag erzeugt. Dazu geht man wie folgt vor:
Öffnen der erweiterten Ansicht des SharePoint Packages:
Danach hinzufügen einer weiteren Assembly und Auswahl des aktuellen Projekts:
An dieser Stelle können wir glücklicherweise mit SharePoint Tokens arbeiten, so dass ich die folgenden Werte eingegeben habe:
Namespace –> $SharePoint.Project.AssemblyFileNameWithoutExtension$
Assembly Name –> $SharePoint.Project.AssemblyFullName$
Schauen wir nun auf die Manifest-Datei des Solution Packages, so wird dort der eben erzeugt Safe Control Eintrag erzeugt:
Unglücklicherweise sind nun aber 2 Einträge für die Assembly selbst vorhanden. Das ist natürlich mehr als unschön (Verhalten außerdem unbekannt), kann aber sehr einfach gelöst werden.
In den Projekt Einstellungen wurde der Schalter “Include Assembly In Package” dafür vorgesehen:
Sobald er auf “False” gestellt wurde, verschwindet die doppelte Referenz der Assembly aus der Manifest-Datei der Solution.
Pingback: Aus der Praxis – Safe Control Eintrag in eine SharePoint 2010 Solution einfügen - SharePoint Blogs in German - Bamboo Nation
Michael Gottschlich
Tobias Schütt