2012-09-02 16 views
9

Estoy usando la característica del paquete visual studio 2012 para sitios web, y tengo un objetivo personalizado para recopilar algunas subcarpetas en el paquete de destino antes de comprimir la carpeta .. Esto solía funcionar bien en vs10 pero con el nuevo packer vs12 ya no le importan estas configuraciones y no se han migrado correctamente de ninguna manera para hacer algo similar, entonces mi paquete eventualmente tendrá estos archivos?CopyAllFilesToSingleFolderForPackageDependsOn ya no es compatible con vs12

Esto es lo que solía ser similar en VS10:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
    <DebugType>pdbonly</DebugType> 
    <Optimize>true</Optimize> 
    <OutputPath>bin\</OutputPath> 
    <DefineConstants>TRACE</DefineConstants> 
    <ErrorReport>prompt</ErrorReport> 
    <WarningLevel>4</WarningLevel> 
    <!-- Begin copy Contracts &Provider directories --> 
    <CopyAllFilesToSingleFolderForPackageDependsOn> 
     CustomCollectFiles; 
     $(CopyAllFilesToSingleFolderForPackageDependsOn); 
    </CopyAllFilesToSingleFolderForPackageDependsOn> 
    <DesktopBuildPackageLocation>..\Package\Release\projectname.zip</DesktopBuildPackageLocation> 
    <DeployIisAppPath>projectname</DeployIisAppPath> 
    <!-- End copy Contracts &Provider directories --> 
    </PropertyGroup> 

    <Target Name="CustomCollectFiles"> 
    <ItemGroup> 
     <_CustomFiles Include="$(OutputPath)\Contracts\**\*" /> 
     <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)"> 
     <DestinationRelativePath>bin\Contracts\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath> 
     </FilesForPackagingFromProject> 
    </ItemGroup> 
    <ItemGroup> 
     <_CustomFiles Include="$(OutputPath)\Providers\**\*" /> 
     <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)"> 
     <DestinationRelativePath>bin\Providers\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath> 
     </FilesForPackagingFromProject> 
    </ItemGroup> 

Esto es completamente ignorada en el nuevo proyecto. ¿Cuál es un buen método para hacer algo similar?

Respuesta

13

Encontré una solución, simplemente cambie el nombre de CopyAllFilesToSingleFolderForPackageDependsOn a CopyAllFilesToSingleFolderForMsdeployDependsOn y los archivos se deben incluir en el paquete de implementación.

Por cierto esto todavía no es la mejor solución ya que se necesita para mantener tanto para apoyar VS12 & vs 10

2

Sin embargo, otro enfoque que también trabaja y requiere menos mantenimiento ..

<Target Name="CustomFolderDeploy" AfterTargets="CopyAllFilesToSingleFolderForPackage" BeforeTargets="MSDeployPublish"> 
    <PropertyGroup> 
     <CustomFolder>$([System.IO.Path]::GetFullPath('$(MSBuildProjectDirectory)\..\..\..\Lib\CustomFolder'))</CustomFolder> 
    </PropertyGroup> 
    <CreateItem Include="$(CustomFolder)\*.*"> 
     <Output TaskParameter="Include" ItemName="CustomFiles" /> 
    </CreateItem> 
    <Copy SourceFiles="@(CustomFiles)" DestinationFolder="$(MSBuildProjectDirectory)\obj\$(Configuration)\Package\PackageTmp\bin" SkipUnchangedFiles="True" ContinueOnError="False" /> 
    </Target> 
+1

Esto parece ser una buena solución, pero no funciona en VS 2013. Parece que BeforeTargets/AfterTargets se ignoran en los archivos .pubxml – nZeus

+0

@nZeus Por lo general, trato de evitar la publicación debido a estos problemas .. Puede crear secuencias de comandos MSBuild y hacerlo de esa manera , entonces funcionará. – ostati

Cuestiones relacionadas