Hat einer 'TokenReplacementFileExtensions' überschrieben?

Published on Wednesday, 18 July 2018

In einer existierenden SharePoint-Solution habe ich heute eine neue Layouts-Page angelegt und mich anschließend mit dem folgenden Fehler herumgeschlagen:

Error CS0234 The type or namespace name 'Expressions' does not exist in the namespace 'System.Web.UI.WebControls' (are you missing an assembly reference?)

Meine Verwirrung war recht umfassend, da ich das Wort "Expressions" nicht finden konnte, das Problem aber offensichtlich an der von mir neu hinzugefügten aspx-Seite lag.

Um meine längliche Suche abzukürzen: Die Solution wurde vor langer Zeit erstellt um einen WebService im SharePoint zu hosten. Vermutlich hat sich der Ersteller an eine der vielen Anleitungen zum Thema (z.B. diese..) gehalten und den folgenden Text in der csproj erfasst:

Dieses Vorgehen findet sich in fast allen Anleitungen... Leider wird dabei oft übersehen, dass diese Eigenschaft nicht "aus dem Nichts" kommt, sondern vorher, an anderer Stelle, schon definiert sein muss. Die Doku sagt dazu:

Although tokens can theoretically be used by any file that belongs to a SharePoint project item included in the package, by default, Visual Studio searches for tokens only in package files, manifest files, and files that have the following extensions:

  • XML
  • ASCX
  • ASPX
  • Webpart
  • DWP

Diese "Voreinstellungen" werden also überschrieben, wenn man strikt den Anleitungen folgt. Eine bessere Möglichkeit wäre es die die TokenReplacementFileExtensions zu ergänzen, statt zu überschreiben: