web-dev-qa-db-ja.com

空のディレクトリをVS2010WebプロジェクトのWebアプリケーションに公開する

アップロードされたファイルを保持するディレクトリなど、ディレクトリが空の場合でも、ディレクトリツリーを保持するWebプロジェクトを公開する必要があることがよくあります。 VS2010publishコマンドを使用してアプリを公開すると、リモートファイルシステムのWebサーバーに空のディレクトリが作成されません。

VSに、空ではあるが、ターゲットディレクトリに特定のフォルダを作成させる方法はありますか?ありがとう!

39
pomarc

いいえ、これは不可能です。同じ問題が発生したのではないかと思います。プリコンパイルツールでこれらの空のフォルダを生成する場合は、空の各ディレクトリにplaceholder.txtファイルを作成する必要があります。ビルド後のイベントでフォルダーを作成するコマンドラインアプリを作成できない場合(ただし、WebサイトプロジェクトではなくWebアプリケーションプロジェクトを使用している場合のみ)。

お役に立てれば。

40
Exitos

この質問がVisual Studio 2010に言及していることは知っていますが、同じ問題を探してここに来ました...

私はVisual Studio 2012を使用していて、この厄介な状況を克服するための素晴らしい/エレガントな方法を見つけました。 VS 2010でも機能し、空のフォルダー内にダミーの空のファイルを追加するよりも優れていると思います。

VS 2012を使用して公開プロファイルを作成すると、MyPublishProfile.pubxmlフォルダー(VBの場合はProperties\PublishProfiles)にMy Project\PublishProfilesファイルが生成されます。これらはMSBuildファイルであり、それらを編集して公開プロセスをカスタマイズできます。この場合、公開が実際に次のように行われる前に、ターゲットを公開プロセスに挿入できます。

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <AfterAddIisSettingAndFileContentsToSourceManifest>CreateEmptyFolders
    </AfterAddIisSettingAndFileContentsToSourceManifest>
  </PropertyGroup>
  <Target Name="CreateEmptyFolders">
    <Message Text="Adding empty folder to hold Files" />
    <MakeDir Directories="$(_MSDeployDirPath_FullPath)\Files\MyEmptyFolder"/>
  </Target>
</Project>

プロパティAfterAddIisSettingAndFileContentsToSourceManifestは、デプロイメントパッケージのコンテンツが準備された後に呼び出されるターゲットの名前を保持します。これは、パッケージにファイルやフォルダーを追加するのに最適な時期です。


コードとテキストの混合:

VS 2012でWeb展開公開タスクの前にのみPowerShellスクリプトを実行する方法は?

Web配置:配置パッケージのカスタマイズ

8

これについてマイクロソフトにバグレポートがあり、彼らはそれを修正しないと言った。 http://connect.Microsoft.com/VisualStudio/feedback/details/546356/publish-deploy-does-not-deploy-empty-folders

残念な。以前はVisualStudio2008で機能していたためです。

ダミーファイルを実際にデプロイする必要はないことに注意してください。ビルド環境でプロジェクトの一部として存在する必要があるだけです。

3

これは私のために働いた:

Leniel Macaferiが述べたように、VisualStudioが生成する公開pubxmlファイルを編集してから、これを追加します。VisualStudioはすでに次のようなプロパティを生成しています。

<publishUrl>f:\publish_web</publishUrl>

の中に

<PropertyGroup>    

セクションなので、次のように使用しました。セクションに追加:

 <PipelineDependsOn>
      CustomBeforePublish;
      $(PipelineDependsOn);
    </PipelineDependsOn>  

そしてまた追加しました:

<Target Name="CustomBeforePublish">
    <Message Text="CustomBeforePublish task:"/>
    <MakeDir Directories="$(publishUrl)\MyFolder\MyFolder2"/>
  </Target>
2
BornToCode

空のフォルダ内にDefault.aspxファイルを追加します。空のままにしておくと、プリコンパイル済みバージョンのフォルダが作成されます。

1