Objetivos de MSBuild y problemas de Visual Studio 2012
visual-studio-2012 msbuild-task (2)
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 lo siguiente en mi archivo * .csproj, puedo establecer la Acción de compilación en '' ThirdPartyAssemblies '':
<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 genial; cuando construyo, los ensambles se copian a 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, parece que no puedo encontrar un objetivo MSBuild adecuado para esta tarea ... Con Visual Studio 2010 podría usar 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 no puedo obtener para que funcione
¿Alguien puede decirme 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?
Estás usando vs2012 y esto significa que tienes un nuevo y brillante msbuild 4.0 =). Es mucho más simple conectar su llamada objetivo con el nuevo atributo AfterTargets . Puede verificar mi respuesta sobre esta pregunta para ver ejemplos de uso.
Gracias a Alexey encontré la solución a mi problema, esto es lo que estoy usando ahora en mi archivo .csproj para admitir la copia de ensamblajes 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>