2017-08-09 4 views
0

公開プロファイルを作成しようとしましたが、公開されたすべてのファイルをさまざまなフォルダにコピーしていました。残念ながら、私はpublishUrlで直接それを行うことはできませんし、すべてのファイルをコピーする1つのフォルダに発行することをお勧めします。私はコピーターゲット機能を書いていましたが、ターゲットの実行順序は間違っています。 私はVisualStudio 2015から直接ビルド>パブリッシュ・ウェブを通してパブリッシュを実行しようとしています。FileSystemにファイルを公開した後にターゲットを実行する

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <WebPublishMethod>FileSystem</WebPublishMethod> 
    <LastUsedBuildConfiguration>Debug</LastUsedBuildConfiguration> 
    <LastUsedPlatform>Any CPU</LastUsedPlatform> 
    <SiteUrlToLaunchAfterPublish /> 
    <LaunchSiteAfterPublish>False</LaunchSiteAfterPublish> 
    <ExcludeApp_Data>True</ExcludeApp_Data> 
    <publishUrl>obj\Package\PackageTemp</publishUrl> 
    <DeleteExistingFiles>True</DeleteExistingFiles> 
    <ExcludeFilesFromDeployment>Web.config;package.json;packages.config;Typescript\**;DynamicCss\**;gulpfile.js;</ExcludeFilesFromDeployment> 
    </PropertyGroup> 
    <Import Project="AdditionalResources.targets" /> 
    <PropertyGroup> 
    <CopyAllFilesToSingleFolderForPackageDependsOn>AdditionalResources</CopyAllFilesToSingleFolderForPackageDependsOn> 
    </PropertyGroup> 
    <ItemGroup> 
    <DestLocations Include="D:\PUBLISH_TEST\" /> 
    <DestLocations Include="D:\PUBLISH_TEST2\" /> 
    </ItemGroup> 
    <Target Name="CopyToDeployFolders" AfterTargets="CopyAllFilesToSingleFolderForPackage" Outputs="%(DestLocations.Identity)"> 
    <ItemGroup> 
     <PublishedFiles Include="obj\Package\PackageTemp\**\*" /> 
    </ItemGroup> 
    <Message Importance="high" Text="FilesToCopy: @(PublishedFiles)" /> 
    <PropertyGroup> 
     <_DeployPathIdentity>%(DestLocations.Identity)</_DeployPathIdentity> 
    </PropertyGroup> 
    <Copy SourceFiles="@(PublishedFiles)" DestinationFiles="@(PublishedFiles->'$(_DeployPathIdentity)%(RecursiveDir)%(Filename)%(Extension)')" /> 
    </Target> 
</Project> 

次のようにそれが実行されます順序は次のとおりです:私のtempフォルダがまだ公開/作成されていないため、問題がある

Build 
AdditionalResources 
CopyToDeployFolders 
Publish folder 

ここ

は私のプロフィールを公開しています。私は自分のCopyToDeployFolders TargetをAfterPublishを上書きするようにしようとしましたが、いろいろなAfterTargetを使用しようとしましたが、それらのどれもうまくいきません - ターゲットが実行されなかったり、

私は を見ることで実行されるターゲットを発見しようとしたC:\プログラムファイル(x86の)\ MSBuildの\これによって示されるように、マイクロソフト\ VisualStudioを\のv14.0 \ウェブ\のMicrosoft.Web.Publishing.targets 答えは Why does MSBuild ignore my BeforePublish target?ですが、正しいものが見つからず、AfterTargetを別のものに変更しようとしましたが、結果は同じです。

編集:診断レベルの 出力:

2> Target "GatherAllFilesToPublish" in file "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets" from project "C:\MyProject\MySite\MySite.csproj" (entry point): 
2>  Done building target "GatherAllFilesToPublish" in project "MySite.csproj". 
2>Done building project "MySite.csproj". 
2>Deleting existing files... 
2>Publishing folder /... 
... files being published ... 
2>Web App was published successfully file:///C:/MyProject/MySite/MySite/obj/Package/PackageTemp 
2> 

EDIT2:AdditionalResources.targets

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="AdditionalResources"> 
    <ItemGroup> 
     <AddFiles Include="$(ProjectDir)\App_Themes\**\Basic\Dynamic.css"> 
     <CustomPath>App_themes\</CustomPath> 
     </AddFiles> 
     <AddFiles Include="C:\y\SharedDLL\Clients\Web\bin\**\*.dll"> 
     <CustomPath>bin\</CustomPath> 
     </AddFiles> 
     <AddFiles Include="C:\y\SharedDLL\Clients\Web\resources\**\ctrl_res\**\*.*" /> 
     <AddFiles Include="C:\y\SharedDLL\Clients\Web\resources\js\**\*.*"> 
     <CustomPath>js\</CustomPath> 
     </AddFiles> 
     <AddFiles Include="C:\y\SharedDLL\Clients\Web\resources\**\ClientBin\**\*.xap" /> 
     <AddFiles Include="C:\y\SharedDLL\Clients\Web\resources\FileUpload\**\*.js"> 
     <CustomPath>js\</CustomPath> 
     </AddFiles> 
     <!-- Minified files should be copied last to override non-minified ones --> 
     <AddFiles Include="$(ProjectDir)\MINIFIED_FILES\**\*.*" /> 
    </ItemGroup> 
    <ItemGroup> 
     <FilesForPackagingFromProject Include="%(AddFiles.Identity)"> 
     <DestinationRelativePath>%(AddFiles.CustomPath)%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath> 
     </FilesForPackagingFromProject> 
    </ItemGroup> 
    </Target> 
</Project> 
+0

診断に設定されたMSBuild冗長性を持つファイル名を指定して実行、それはその後、ちょうどAfterTargetsで使用するために適切なものを選んで、すべてのターゲットが表示されます。 – stijn

+0

@stijnこれを試しましたが、ファイルの公開が開始されるときにはターゲットがありません。私の質問は出力なしで更新されました。 – CrudaLilium

+0

@CrudaLilium、パブリッシュプロファイルでサンプルを作成しましたが、テスト後にターゲットCopyToDeployFoldersがパブリッシュされた後に実行されたことがわかりました(AddResources.targetsファイルがないため、ターゲットのAdditionalResourcesにコメントします)。 AddResources.targetsファイルを共有したり、onedriveでサンプルをテストしたり、ここでリンクを共有して、この問題を再現できるようにしてください。 –

答えて

1

の 追加コンテンツが、私はAfterPublishを上書きするターゲット私CopyToDeployFoldersを作ってみましたとしようとしましたさまざまなAfterTargetを使用しますが、どちらも機能しませんでした

msbuildの詳細を設定したプロジェクトファイルをテストした後、詳細を設定します。私はあなたと同じ結果を得ました。その後、カスタムターゲットCopyToDeployFoldersがコピーファイルobj\Release\Package\PackageTmpに、ただし公開フォルダに実行されたことがわかりました。あなたが持っている順序と同じように。

Build 
AdditionalResources 
CopyToDeployFolders 
Publish folder 

は、さらなる調査の後、私は公式の回答を見つけました:

「我々は現在、後にカスタムターゲットを実行してサポートしていないファイルシステムプロトコルのためのVSから公開コマンドラインから公開する場合。しかし、目標は実行されます。

加えて、我々は、出力ウィンドウにログを見て同じように、カスタムターゲットCopyToDeployFoldersobj\Release\Package\PackageTmpにコピーファイル後を実行しました。この問題を回避するには、パブリッシュフォルダ "obj\Package\PackageTemp"ではなく、 "obj\Release\Package\PackageTmp"フォルダからすべてのファイルをコピーできますが、問題は解決されます。

はだから<PublishedFiles Include="obj\Package\PackageTemp\**\*" />に変更する必要があります。

<ItemGroup> 
    <PublishedFiles Include="obj\Debug\Package\PackageTmp\**\*" /> 
</ItemGroup> 
+0

回避策をお寄せいただき、ありがとうございます。VSから実行するために必要なのですばらしいです。コンソールからも実行しようとしましたが、実際には公開後に実行されますが、私たちは多くのバッチファイルを取り除こうとしているので、回避策を検討します。 – CrudaLilium

関連する問題