更新:
どうやら、本当に必要なのは、web デプロイが宛先サーバー上の既存のディレクトリを削除するのを防ぎますが、そこにない場合に備えてフォルダーを作成します。これは次のように実行できます。
次の内容のプロジェクト ファイルの隣にYourWebProjectName.wpp.targetsファイルを作成します。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<MsDeploySkipRules Include="SkipELMAHFolderFiles">
<SkipAction></SkipAction>
<ObjectName>filePath</ObjectName>
<AbsolutePath>$(_DestinationContentPath)\\NameOfYourFolder\\.*</AbsolutePath>
<Apply>Destination</Apply>
<XPath></XPath>
</MsDeploySkipRules>
<MsDeploySkipRules Include="SkipELMAHFolderChildFolders">
<SkipAction></SkipAction>
<ObjectName>dirPath</ObjectName>
<AbsolutePath>$(_DestinationContentPath)\\NameOfYourFolder\\.*\\*</AbsolutePath>
<Apply>Destination</Apply>
<XPath></XPath>
</MsDeploySkipRules>
</ItemGroup>
</Project>
それに応じて変更NameOfYourFolder
しYourWebProjectName
ます。これは、ルートにあることを前提としています。そうでない場合は、相対パスを使用できると思います。
- 最初のエントリは、 webdeploy にName_OfYourFolder
MsDeploySkipRules
内のファイルを削除しないように指示します。
- 2 番目
MsDeploySkipRules
は、 Name_OfYourFolder 内の子フォルダーを削除しないよう webdeploy に指示します。
また、宛先サーバーに存在しない場合にフォルダーを作成するには、次の手順を実行する必要があります。
- フォルダーをプロジェクトに含める
- ダミーのDeployemntPlaceholder.txtファイルを追加し、プロジェクトにも含めます
DeployemntPlaceholder.txtは、MSBUild にフォルダーをパッケージに追加するように指示するために必要です。空のフォルダーは無視されます。
私はこのアプローチをテストしましたが、あなたが示した方法でパブリッシュを実行するとうまくいきます。この回答を使用して、msbuild アイテムの構文を正しくしました。これは、MSBuild Deployment Pipeline によって webdeploy に渡された、フラグをカスタマイズするための MSBuild の方法だと思います。
MSDeploy を直接実行した場合は、次の方法でスキップ引数を使用できます。
-skip:objectname='filePath',absolutepath='logs\\.*\\someNameToExclude\.txt'
更新 2
また、\Uploads フォルダーに ACL の書き込み権限を設定することもできます。これを行うための完全なガイドがあります: Web 公開でのフォルダー権限の設定
元の質問「Web Deploy で同期しないようにフォルダーを指定する」を考慮して、これを行う最も簡単な方法は次のとおりです。
発行プロファイルを作成し、次の行を追加できます。
<PropertyGroup>
<ExcludeFilesFromDeployment>
File1.aspx;File2.aspx
</ExcludeFilesFromDeployment>
<ExcludeFoldersFromDeployment>
Folder1;Folder2
</ExcludeFoldersFromDeployment>
</PropertyGroup>
パブリッシュ プロファイルを使用してファイルを除外するこのアプローチをテストしました。簡単なガイドはこちらです( .pubxml ファイルを編集して robots.txtセクションを除外するまでスクロールします)。
.wpp.targets ファイルでこれを行うか、csproj を編集することもできます。詳細については、Visual Studio および ASP.NET の Web 配置に関する FAQ を参照してください。