2009-08-12 12 views
3

Ich habe eine benutzerdefinierte Masterseite in Sharepoint erstellt, die mit vielen Bildern (etwa 200) kommt. Wie verpacke ich alle bereitzustellenden Dateien in die Stilbibliothek einer Websitesammlung? Der einzige Weg, um dies zu tun, ist durch eine Funktion, aber das bedeutet, jede einzelne Datei (alle 200 davon) als <file></file> Element aufzulisten. Gibt es einen leichteren Weg? Das Attribut IncludeFolders = "?? - ??" in <module></module> scheint nichts zu tun.Sharepoint Branding - Mehrere Datei Provisioning

Wenn sich alle Bilddateien in einem Ordner in meinem Feature-Ordner befinden (z. B. ... \ template \ features \ myFeature \ images), gibt es eine Möglichkeit, den gesamten Ordner der Stilbibliothek zuzuweisen?

Danke.

Antwort

4

Diese Datei module.xml befindet sich in einem Ordner namens "Images". Alle Bilder befinden sich ebenfalls in diesem Ordner (unter Verwendung der Sharepoint-Entwicklungstools für Visual Studio 2008 v1.3). Das WSP-Paket muss alle hinzuzufügenden Dateien kennen, so dass Sie jede Datei hinzufügen müssen. (Benennen Sie die WSP .cab und öffnen Sie dann alle Dateien in der Lösung sehen.)

<Elements Id="8f8113ef-75fa-41ef-a0a2-125d74fc29b7" xmlns="http://schemas.microsoft.com/sharepoint/"> 
    <Module Name="Images" Url="Style Library/Images/myfolder" RootWebOnly="TRUE"> 
    <File Path="hvi_logo.bmp" Url="hvi_logo.bmp" Type="GhostableInLibrary" /> 
    <File Path="hvi_logo_small.bmp" Url="hvi_logo_small.bmp" Type="GhostableInLibrary" /> 
    <File Path="epj-logo.png" Url="epj-logo.png" Type="GhostableInLibrary" /> 
    </Module> 
</Elements> 

Sie ein kleines C# app wirte könnte die XML-Datei für Sie, so etwas zu schaffen:

var info = new DirectoryInfo(@"c:\pathToImageFolder"); 
     var files = info.GetFiles(); 

     TextWriter writer = new StreamWriter(@"c:\pathToImageFolder\module.xml"); 

     writer.WriteLine("<Elements Id=..."); 
     foreach (FileInfo file in files) 
     { 
      writer.WriteLine(string.Format("<File Path='{0}' Url='{0}' Type='GhostableInLibrary' />",file.Name)); 
     } 
     writer.WriteLine("</Elements>"); 
     writer.Flush(); 
     writer.Close(); 
+0

Vielen Dank für Ihre Antwort. Guter Vorschlag, um die modules.xml-Datei programmgesteuert dynamisch zu erstellen. Ich werde es versuchen. –

1

Hier ist eine schnelle Powershell-Funktion, die für mich funktioniert:

function Enum-FilesInPath 
{ 
    param([string]$path) 

    Get-ChildItem -path $path | foreach-object { 
     # if a directory, recurse... 
     if ($_.PSIsContainer) 
     { 
      $recursivePath = [string]::Format("{0}\{1}", $path, $_.Name) 
      Enum-FilesInPath $recursivePath 
     } 
     # else if a file, print out the xml for it 
     else 
     { 
      $finalPath = [string]::Format("{0}\{1}", $path, $_.Name) 
      $url = $finalPath.Replace("\", "/") # backslashes for path, forward slashes for urls 
      [string]::Format("`t<File Url=`"$url`" Path=`"$fullPath`" Type=`"GhostableInLibrary`" />") 
     } 
    } 
}