Публиковать пустые каталоги в веб-приложении в веб-проекте VS2010
Часто мне нужно опубликовать веб-проект, сохраняющий дерево каталогов, даже если каталоги пусты, например, каталоги для хранения загруженных файлов.
Если я опубликую свое приложение с помощью команды публикации VS2010, пустые каталоги не будут созданы в удаленной файловой системе на веб-сервере.
Есть ли способ заставить VS создавать определенные папки, пусть и пустые, в целевом каталоге?
спасибо!
Ответы
Ответ 1
Нет, это невозможно. Боюсь, у нас была такая же проблема. Вам нужно создать файл placeholder.txt в каждом пустом каталоге, если вы хотите, чтобы инструмент предварительной компиляции генерировал эти пустые папки. В противном случае вы можете создать приложение командной строки, которое создаст папки в ваших событиях создания сообщений (но только если вы используете проект веб-приложения, а не проект веб-сайта).
Надеюсь, что это поможет.
Ответ 2
Я знаю, что в этом вопросе упоминается 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 script только до развертывания веб-службы Опубликовать задачу в VS 2012?
Развертывание Web: настройка пакета развертывания
Ответ 3
Об этом сообщил Microsoft отчет об ошибке, и они сказали, что они не исправят это.
http://connect.microsoft.com/VisualStudio/feedback/details/546356/publish-deploy-does-not-deploy-empty-folders
Слишком плохо. Потому что он работал в Visual Studio 2008.
Обратите внимание, что нет необходимости фактически развертывать фиктивный файл. Он должен существовать только как часть проекта в среде сборки.
Ответ 4
Это работало для меня:
Отредактируйте опубликованный 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>
Ответ 5
Внутри пустой папки Добавить файл Default.aspx. Вы можете оставить его пустым. Затем он создаст папку в версии PreCompiled.