Domanda

Sto lavorando su una soluzione SharePoint che contiene cinque progetti di Visual Studio. Uno è un tipo "libreria comune" del progetto e gli altri quattro sono le caratteristiche con il codice che dipendono dalla biblioteca.

Il problema è con lo sviluppo, la distribuzione e il confezionamento di tutti sulla stessa macchina in questo scenario. Se la DLL per la libreria comune è nel GAC (che è come parte di debug e test) quindi Visual Studio non copiarlo nella cartella di bin\Release come parte di una generazione. (Questo è vero anche se "copia locale" è impostata su true sulle proprietà del riferimento alla libreria comune.) Così, quando WSPBuilder arriva per imballaggio è necessario utilizzare il file è mancante e le caratteristiche non funzionerà.

Come questo dovrebbe essere superata?

È stato utile?

Soluzione

Proprio per rendere semplice risposta: Nel progetto Visual Studio creare una cartella chiamata GAC ??e posto le assemblee reffed lì e WSPBuilder si prenderà cura di tutto il resto. / WW

Altri suggerimenti

Qualcuno sono state facendo WSP si basa sul suo server di dev, e non sul server di build; -)

Questo è un bug noto. Abbiamo incontrato solo in esso quando qualcuno per caso costruire la propria WSP invece di prendere dal server di build (come dovrebbe) dove niente era nel GAC.

hth Anders Rask

I refactoring le cose sul mio progetto in corso "consolidare" il numero di PSA utilizzati, quindi abbiamo una situazione simile. Abbiamo circa 12 progetti di Visual Studio, ma solo 2 WSP -. Questo è solo il factoring, che rende più senso e le offerte più convenienza per noi

ho scritto un po 'di MSBuild l'altro giorno per aiutare WSPBuilder raggiungere gli imballaggi che vogliamo - questo potrebbe essere quello che stai cercando. Effettivamente abbiamo 2 speciale "Packaging" progetti che consolidano le assemblee, i file nella directory principale di SharePoint, ecc afferrando questi file da altri progetti nella soluzione in fase di compilazione. Questo campione è per 1 dei miei 2 progetti di packaging e viene salvato separatamente come dire FooCollabBuild.csproj:

<?xml version="1.0" encoding="utf-8" ?>
<Project DefaultTargets="FooSharePointBuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="FooSharePointBuild">

    <!-- first clear down the 12 directory -->
    <Message Text="------ Clearing down $(ProjectDir)12  ------" Importance="high" />
    <ItemGroup>
      <FilesToDelete Include="$(ProjectDir)12" />
    </ItemGroup>

    <Message Text="------ If an MSBuild error occurs here it can safely be ignored ------" Importance="high" />
    <RemoveDir ContinueOnError="true" Directories="@(FilesToDelete)" />

    <!-- now grab the 12 files from the other projects -->
    <Message Text="------ Copying files into $(ProjectDir)12  ------" Importance="high" />
    <ItemGroup>
      <SharePointFiles Include="$(SolutionDir)Foo.SharePoint.Common\12\**\*.*" Exclude="$(SolutionDir)Foo.SharePoint.Common\12\**\*.spvdinfo" />
      <SharePointFiles Include="$(SolutionDir)Foo.SharePoint.TeamSite\12\**\*.*" Exclude="$(SolutionDir)Foo.SharePoint.TeamSite\12\**\*.spvdinfo" />
      <SharePointFiles Include="$(SolutionDir)Foo.SharePoint.CrossSiteCollection\12\**\*.*" Exclude="$(SolutionDir)Foo.SharePoint.CrossSiteCollection\12\**\*.spvdinfo" />
      <SharePointFiles Include="$(SolutionDir)Foo.SharePoint.SubSiteCreation\12\**\*.*" Exclude="$(SolutionDir)Foo.SharePoint.SubSiteCreation\12\**\*.spvdinfo" />
      <SharePointFiles Include="$(SolutionDir)Foo.SharePoint.SubSiteCreation.Workflow\12\**\*.*" Exclude="$(SolutionDir)Foo.SharePoint.SubSiteCreation.Workflow\12\**\*.spvdinfo" />
    </ItemGroup>

    <Copy SourceFiles="@(SharePointFiles)" DestinationFolder="$(ProjectDir)12\%(RecursiveDir)" />

    <!-- now grab the assemblies from the other projects -->
    <Message Text="------ Copying files into $(ProjectDir)GAC  ------" Importance="high" />
    <ItemGroup>
      <Assemblies Include="$(SolutionDir)Foo.SharePoint.Common\bin\**\*.dll" />
      <Assemblies Include="$(SolutionDir)Foo.SharePoint.TeamSite\bin\**\*.dll" />
      <Assemblies Include="$(SolutionDir)Foo.SharePoint.CrossSiteCollection\bin\**\*.dll" />
      <Assemblies Include="$(SolutionDir)Foo.SharePoint.SubSiteCreation\bin\**\*.dll" />
      <Assemblies Include="$(SolutionDir)Foo.SharePoint.SubSiteCreation.Workflow\bin\**\*.dll" />
    </ItemGroup>

    <Copy SourceFiles="@(Assemblies)" DestinationFolder="$(ProjectDir)GAC\" />


  </Target>
</Project>

Questo è poi fatto riferimento nel file Csproj effettiva del progetto "pacchetto" utilizzando:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(SolutionDir)\FooCollabBuild.proj" />
<Target Name="AfterBuild">
  <CallTarget Targets="FooSharePointBuild" />
</Target>

Poi ogni volta che ho bisogno di un WSP (al contrario di copiare 12 / copio bin / copiare GAC), mi basta usare le estensioni WSPBuilder sul progetto pacchetto di generare. I suoi SafeControls voci ecc saranno presi cura di dal momento WSPBuilder vede le assemblee nella cartella GAC.

Shout se avete domande.

file My WSPBuilder.exe.config ha questa impostazione:

<add key="IncludeAssemblies" value="true" />

Il che fa sì che WSPBuilder per includere riferimenti da GAC ??se non sbaglio ..

La soluzione SharePoint che sto lavorando su sta usando un certo numero di progetti di Visual Studio per consentire il confezionamento fino a un'unica soluzione WSP. Usiamo gli eventi post-compilazione per ogni progetto per copiare le varie cartelle 12, 80, GAC in una cartella della soluzione come build.

Abbiamo trovato che in ciascuna delle 80 e GAC cartelle abbiamo bisogno di avere un file fittizio (abbiamo utilizzato un file readme.txt) mettere nella cartella in modo che la cartella viene creata quando si utilizza TFS server Genera.

Il progetto che ha il maggior numero di dipendenze costruisce poi la soluzione WSP eseguendo costruttore WSP sulla cartella e copie creare la soluzione \ il file con estensione wsp in una cartella soluzione \ Deployment.

Per mantenere i tempi di costruzione veloce abbiamo due configurazioni costruire uno chiamato Debug che aggiunge le assemblee per l'area appropriata applicazione web bin o GAC. Mentre abbiamo un accumulo separata denominata TeamServer che deve essere scelto in modo che il WSP per essere costruito in modo corretto.

Non ho il mio codice di evento di build post per mano in questo momento, ma se avete bisogno di più informazioni quindi basta chiedere.

Saluti Simon

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top