2012-09-02 14 views
9

Używam funkcji pakietu wizualnego studio 2012 dla stron internetowych i mam niestandardowy cel, aby zebrać niektóre podkatalogi do miejsca docelowego pakietu przed skompresowaniem folderu. To dobrze działało w vs10, ale z nowym pakietem vs12 nie dba już o żadną z tych konfiguracji i nie zostały one poprawnie zmigrowane jakikolwiek sposób na zrobienie czegoś podobnego, więc moja paczka w końcu będzie miała te pliki?CopyAllFilesToSingleFolderForPackageDependsOn nie jest już obsługiwany przez vs12

To, co było kiedyś wyglądać w 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> 

ta jest całkowicie ignorowany w nowym projekcie. Jaka jest dobra metoda na zrobienie czegoś podobnego?

Odpowiedz

13

Znaleziono rozwiązanie, wystarczy zmienić nazwę CopyAllFilesToSingleFolderForPackageDependsOn na CopyAllFilesToSingleFolderForMsdeployDependsOn, a pliki powinny zostać uwzględnione w pakiecie wdrażania.

BTW to nadal isnt najlepsze rozwiązanie, ponieważ trzeba utrzymać zarówno wspierać vs12 & vs 10

2

Jeszcze inne podejście, które również działa i wymaga mniej konserwacji ..

<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

To wydaje się być dobre rozwiązanie, ale nie działa w VS 2013. Wydaje się, że BeforeTargets/AfterTargets są ignorowane w plikach .pubxml. – nZeus

+0

@nZeus Generalnie staram się unikać publikowania z powodu takich problemów .. Możesz stworzyć skrypt MSBuild i zrobić to w ten sposób , to zadziała. – ostati

Powiązane problemy