7

Me está resultando difícil implementar los ensamblados de terceros que no son de referencia implementados a través de Webdeploy con la interfaz de usuario de Visual Studio 2012. Tengo una carpeta llamada 'libraries', que contiene algunos ensambles. A través de la siguiente en mi archivo .csproj * Puedo establecer el Acción de generación a 'ThirdPartyAssemblies':Objetivos de MSBuild y problemas de Visual Studio 2012

<ItemGroup> 
    <AvailableItemName Include="ThirdPartyAssemblies"> 
    <Visible>false</Visible> 
    </AvailableItemName> 
</ItemGroup> 
<Target Name="AfterBuild"> 
    <Message Text="Build | Third party assemblies" Importance="high" /> 
    <Copy DestinationFolder="$(OutputPath)" SourceFiles="@(ThirdPartyAssemblies)" SkipUnchangedFiles="true" /> 
</Target> 

Esto funciona muy bien; cuando construyo, los ensambles se copian en la raíz de la carpeta bin :-) Ahora tengo un problema: no puedo obtener estos archivos publicados en el servidor a través de Webdeploy. He intentado muchas cosas, sólo parece que no puedo encontrar un objetivo adecuado para esta tarea MSBuild ... Con Visual Studio 2010 que podría utilizar esto:

<Target Name="MyTargetName"> 
    <Message Text="Deploy | Third party assemblies" Importance="high" /> 
    <Copy DestinationFolder="$(OutputPath)" SourceFiles="@(ThirdPartyAssemblies)" SkipUnchangedFiles="true" /> 
</Target> 
<PropertyGroup> 
    <OnAfterCopyAllFilesToSingleFolderForPackage> 
    MyTargetName 
    </OnAfterCopyAllFilesToSingleFolderForPackage> 
</PropertyGroup> 

El problema es; el objetivo OnAfterCopyAllFilesToSingleFolderForPackage ya no se llama: -/

Después de indagar en el C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.targets' file, I've also tried 'OnAfterCopyAllFilesToSingleFolderForMsdeploy, pero simplemente no puedo hacer que funcione.

¿Alguien me puede decir qué objetivo puedo usar para copiar esos ensamblajes en la carpeta del paquete/el servidor con Webdeploy?

¿Por qué Visual Studio 2012 no copia la carpeta bin completa en la carpeta Package?

Respuesta

8

Gracias a Alexey he encontrado la solución a mi problema, esto es lo que estoy usando ahora en mi archivo .csproj para apoyar la copia de asambleas de terceros para Filesystem- y Webdeploy:

<ItemGroup> 
    <AvailableItemName Include="ThirdPartyAssemblies"> 
     <Visible>false</Visible> 
    </AvailableItemName> 
</ItemGroup> 
<Target Name="AfterBuild"> 
    <Message Text="Build | Copying third party assemblies to output folder ($(OutputPath))" Importance="high" /> 
    <Copy DestinationFolder="$(OutputPath)" SourceFiles="@(ThirdPartyAssemblies)" SkipUnchangedFiles="true" /> 
</Target> 
<Target Name="CopyBinFiles" AfterTargets="CopyAllFilesToSingleFolderForPackage" BeforeTargets="MSDeployPublish"> 
    <Message Text="Deploy | Copying third party assemblies to output folder ($(_PackageTempDir)\bin\)" Importance="high" /> 
    <Copy DestinationFolder="$(_PackageTempDir)\bin\" SourceFiles="@(ThirdPartyAssemblies)" SkipUnchangedFiles="true" /> 
</Target> 
2

Usted está usando vs2012 y esto significa que tiene nuevo msbuild brillante = 4.0 =). Es mucho más simple conectar su llamada de destino con el nuevo atributo AfterTargets. Puede marcar my answer on this question para ver el ejemplo de uso.

+1

FYI VS2010 también usado msbuild 4.0 –

+1

Lo sé;). No necesitas VS en absoluto. Parte de MSBuild de .NET FW, para que pueda usarlo sin ningún tipo de estudio. Excepto que vs2010 realmente no usa msbuild.exe, pero sí VS2012. Pero esto es nimbo, no relacionado con preguntas y respuestas. –

Cuestiones relacionadas