Pregunta

Estoy trabajando en una solución de SharePoint que contiene cinco proyectos de Visual Studio. Se trata de un tipo "biblioteca común" del proyecto y los otros cuatro son características con código que dependen de la biblioteca.

El problema está relacionado con el desarrollo, despliegue, y el empaquetado de todos en la misma máquina en este escenario. Si el archivo DLL de la biblioteca común es en la GAC ??(que es como parte de la depuración y pruebas) a continuación, Visual Studio no copiarlo a la carpeta bin\Release como parte de una generación. (Esto es cierto incluso si "Copia Local" se establece en true en las propiedades de la referencia a la biblioteca común.) Así que cuando WSPBuilder llega a embalar la unidad se encuentra el archivo y las características no funcionará.

¿Cómo debe ser superada?

¿Fue útil?

Solución

Sólo para hacer una respuesta sencilla: En el proyecto de Visual Studio crea una carpeta llamada GAC ??y colocar sus asambleas reffed allí y WSPBuilder se hará cargo del resto. / WW

Otros consejos

Alguien han estado haciendo WSP se basa en su servidor de dev, y no en el servidor de compilación; -)

Esto es un error conocido. Sólo nos encontramos con que cuando alguien por accidente construir su propia WSP en vez de tomarlo desde el servidor de compilación (como debería), donde no había nada en la GAC.

hth Anders Rask

Me refactorizado cosas en mi proyecto actual "consolidar" el número de los PSA utilizados, por lo que tenemos una situación similar. Tenemos alrededor de 12 proyectos de Visual Studio, pero sólo 2 - PSA. Esa es la factorización de los cuales tiene más sentido y ofrece la mayor comodidad para nosotros

Me escribió algunas MSBuild el otro día para ayuda WSPBuilder lograr el envasado queremos - esto podría ser lo que estás buscando. Efectivamente tenemos 2 especial "empaquetar" los proyectos que consolidan asambleas, archivos en la raíz de SharePoint, etc por el acaparamiento de estos archivos de otros proyectos en la solución en tiempo de compilación. Esta muestra es de 1 de mis 2 proyectos de embalaje y se guarda por separado como decir 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>

Esto se hace referencia a continuación en el archivo .csproj real del proyecto "paquete" usando:

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

A continuación, cada vez que necesito un PSA (en contraposición a copiar 12 / copio bin / copiar GAC), sólo tiene que utilizar las extensiones WSPBuilder en el proyecto conjunto para generar. Sus entradas SafeControls etc. serán atendidos desde WSPBuilder ve las asambleas en la carpeta GAC.

Shout si tiene alguna pregunta.

Mi archivo WSPBuilder.exe.config tiene esta configuración:

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

¿Qué hace que WSPBuilder para incluir referencias de la GAC, si no me equivoco ..

La solución SharePoint que estoy trabajando es el uso de una serie de proyectos de Visual Studio para permitir el envasado hasta una solución WSP sola. Utilizamos publicar eventos de construcción de cada proyecto para copiar las distintas carpetas 12, 80, GAC en una carpeta solución llamada Generar.

Se encontró que en cada una de las 80 y GAC carpetas que se necesita para tener un archivo de prueba (se utilizó un archivo readme.txt) poner en la carpeta para que la carpeta se crea cuando se utilizan servidores Build TFS.

El proyecto que tiene la mayoría de las dependencias entonces construye la solución mediante la ejecución de wsp wsp constructor en la solución de \ carpeta de compilación y copia el archivo en una carpeta .wsp Solution \ despliegue.

Para mantener los tiempos de construcción rápida que tienen dos configuraciones de construcción una llamada de depuración que se suma a los conjuntos de la zona apropiada bin aplicación web o GAC. Mientras no dispongamos de una construcción separada llamada TeamServer que tiene que ser seleccionada para que el WSP para ser construido correctamente.

No tengo mi código de evento de construcción posterior a mano en el momento, pero si necesita más información a continuación, sólo hay que preguntar.

Saludos Simon

Licenciado bajo: CC-BY-SA con atribución
scroll top