Я відповів на подібне, але інше запитання на тему Як ви включаєте додаткові файли за допомогою веб-пакетів розгортання VS2010? .
У вашому сценарії ви використовуєте подію після збірки, я б рекомендував скинути подію збірки та реалізувати ваші дії, використовуючи власні цілі MSBuild замість події після збірки. Нижче ви знайдете текст іншої відповіді.
З: Як включати додаткові файли за допомогою веб-пакетів розгортання 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). Це говорить про те, щоб розмістити його в тому самому відносному місці в пакунку, що і в папці Extra Files.
Виключаючи файли
Якщо ви відкриєте файл проекту веб-програми, створеної за допомогою 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 тут. Я не буду вникати в це тут, але ви повинні знати, щоб це завжди вказувати.