9

Sto utilizzando la funzione di pacchetto di Visual Studio 2012 per siti Web e ho un obiettivo personalizzato per raccogliere alcune sottocartelle nella destinazione del pacchetto prima di zippare la cartella. Questo funzionava bene in vs10 ma con il nuovo packager vs12 non interessa più a nessuna di queste configurazioni e non sono state migrate correttamente in alcun modo per fare qualcosa di simile, quindi il mio pacchetto alla fine avrà questi file?CopyAllFilesToSingleFolderForPackageDependsOn non più supportato da vs12

Questo è quello che ha usato per assomigliare in 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> 

questo è completamente ignorato nel nuovo progetto. Qual è un buon metodo per fare qualcosa di simile?

risposta

13

Trovato una soluzione, è sufficiente rinominare CopyAllFilesToSingleFolderForPackageDependsOn a CopyAllFilesToSingleFolderForMsdeployDependsOn ei file devono essere inclusi nel pacchetto di distribuzione.

BTW questo ancora non è il migliore soluzione in quanto è necessario per mantenere sia per sostenere VS12 & vs 10

2

Ancora un altro approccio che funziona anche e richiede meno manutenzione ..

<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

Questo sembra essere un buona soluzione, ma non funziona in VS 2013. Sembra che BeforeTargets/AfterTargets siano ignorati nei file .pubxml – nZeus

+0

@nZeus In genere cerco di evitare la pubblicazione a causa di tali problemi .. Puoi creare script MSBuild e farlo in questo modo , allora funzionerà. – ostati