Ответ 1
Я ответил на аналогичный, но другой вопрос в Как включить дополнительные файлы с помощью пакетов развертывания VS2010?.
В вашем сценарии вы используете событие post build, я бы рекомендовал удалить событие post build и реализовать ваши действия, используя ваши собственные цели MSBuild, а не post post event. Ниже вы найдете текст другого ответа.
От: Как включить дополнительные файлы с помощью пакетов развертывания VS2010?
Отличный вопрос. Я просто разместил очень подробный блог о нем на Инструмент веб-развертывания (MSDeploy): сборка пакета, включая дополнительные файлы или исключение определенных файлов.
Вот краткий обзор. После включения файлов я также покажу, как исключать файлы.
Включение дополнительных файлов
Включение дополнительных файлов в пакет немного сложнее, но по-прежнему не важно, если вам удобно с MSBuild, и если вы не читаете это. Для этого нам нужно подключиться к той части процесса, которая собирает файлы для упаковки. Цель, которую нам нужно расширить, называется CopyAllFilesToSingleFolder. Эта цель имеет свойство зависимости, PipelinePreDeployCopyAllFilesToOneFolderDependsOn, которое мы можем задействовать и внедрить в нашу собственную цель. Таким образом, мы создадим объект с именем CustomCollectFiles и добавим его в этот процесс. Мы достигаем этого со следующим (помните после оператора импорта).
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>
Это добавит нашу цель в процесс, теперь нам нужно определить сам объект. Предположим, что у вас есть папка с надписью Extra Files, которая находится на 1 уровне над вашим веб-проектом. Вы хотите включить все эти файлы. Вот цель CustomCollectFiles, и мы обсудим после этого.
<Target Name="CustomCollectFiles">
<ItemGroup>
<_CustomFiles Include="..\Extra Files\**\*" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>Extra Files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
Здесь я создал элемент _CustomFiles и в атрибуте Include, чтобы он взял все файлы в этой папке и любую папку под ним. Затем я использую этот элемент для заполнения элемента FilesForPackagingFromProject. Это элемент, который MSDeploy фактически использует для добавления дополнительных файлов. Также обратите внимание, что я объявил значение метаданных DestinationRelativePath. Это определит относительный путь, который будет помещен в пакет. Я использовал выражение Extra Files% (RecursiveDir)% (Filename)% (Extension) здесь. Это говорит о том, чтобы разместить его в том же относительном местоположении в пакете, что и в папке "Дополнительные файлы".
Исключение файлов
Если вы откроете файл проекта веб-приложения, созданного с помощью VS 2010, в нижней части его, вы найдете строку с.
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
Кстати, вы можете открыть файл проекта внутри VS. Щелкните правой кнопкой мыши проект, выбрав "Проект разгрузки". Затем щелкните правой кнопкой мыши на выгруженном проекте и выберите "Редактировать проект".
Это выражение будет включать все цели и задачи, которые нам нужны. Большинство наших настроек должны быть после этого импорта, если вы не уверены, если после! Поэтому, если у вас есть файлы для исключения, есть имя элемента, ExcludeFromPackageFiles, которое можно использовать для этого. Например, скажем, что у вас есть файл с именем Sample.Debug.js, который включен в ваше веб-приложение, но вы хотите, чтобы этот файл был исключен из созданных пакетов. Вы можете поместить сниппет ниже после этого оператора импорта.
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
Объявив о заполнении этого элемента, файлы будут автоматически исключены. Обратите внимание на использование метаданных FromTarget. Я не буду вдаваться в это здесь, но вы должны знать, чтобы всегда указывать это.