публиковать пустые каталоги в веб-приложении в веб-проекте VS2010 - PullRequest
39 голосов
/ 23 ноября 2010

Часто мне нужно публиковать веб-проект, сохраняющий дерево каталогов, даже если каталоги пусты, например, каталоги для хранения загруженных файлов. Если я публикую свое приложение с помощью команды публикации VS2010, пустые каталоги не будут созданы в удаленной файловой системе на веб-сервере.

Есть ли способ заставить VS создавать определенные папки, хотя и пустые, в целевом каталоге? спасибо!

Ответы [ 5 ]

40 голосов
/ 24 ноября 2010

Нет, это невозможно. Боюсь, у нас была такая же проблема. Вам нужно создать файл placeholder.txt в каждом пустом каталоге, если вы хотите, чтобы инструмент предварительной компиляции генерировал эти пустые папки. В противном случае вы можете создать приложение командной строки, которое будет создавать папки в событиях пост-сборки (но только если вы используете проект веб-приложения, а не проект веб-сайта).

Надеюсь, это поможет.

8 голосов
/ 30 апреля 2013

Я знаю, что этот вопрос упоминает Visual Studio 2010, но я попал сюда в поисках той же проблемы ...

Я использую Visual Studio 2012 и нашел хороший / элегантный способ преодолеть эту досадную ситуацию. Я думаю, что это также будет работать в VS 2010 и лучше, чем добавление пустых пустых файлов в пустые папки.

Когда вы создаете профиль публикации с помощью VS 2012, он создает файл MyPublishProfile.pubxml в папке Properties\PublishProfiles (My Project\PublishProfiles для VB). Это 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 содержит имена целей, которые будут вызваны после подготовки содержимого для пакета развертывания. Это идеальное время для добавления дополнительных файлов или папок в пакет.


Код и текст, смешанные с:

Как выполнить сценарий PowerShell только перед веб-развертыванием задачи публикации в VS 2012?

Web Deploy: настройка пакета развертывания

3 голосов
/ 21 февраля 2012

Был отчет об ошибке в Microsoft об этом, и они сказали, что они не будут это исправлять.http://connect.microsoft.com/VisualStudio/feedback/details/546356/publish-deploy-does-not-deploy-empty-folders

Очень плохо.Потому что раньше он работал в Visual Studio 2008.

Обратите внимание, что нет необходимости фактически развертывать фиктивный файл.Он должен существовать только как часть проекта в среде сборки.

2 голосов
/ 27 июля 2015

Этот работал для меня:

Отредактируйте ваш файл публикации pubxml, который генерирует Visual Studio, как упомянул Leniel Macaferi, затем добавьте это: Visual Studio уже сгенерировала свойство, подобное

<publishUrl>f:\publish_web</publishUrl>

в разделе

<PropertyGroup>    

, поэтому я использовал его так: Добавлено в раздел:

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

А также добавлено:

<Target Name="CustomBeforePublish">
    <Message Text="CustomBeforePublish task:"/>
    <MakeDir Directories="$(publishUrl)\MyFolder\MyFolder2"/>
  </Target>
1 голос
/ 01 октября 2013

Внутри пустой папки Добавьте файл Default.aspx.Вы можете оставить его пустым, затем папка будет создана в предварительно скомпилированной версии.

...