Чудове запитання. Щойно я опублікував дуже детальну запис про це в блозі в Інструменті веб-розгортання (MSDeploy): Пакет збірки, включаючи додаткові файли або виключаючи конкретні файли .
Ось конспект Після включення файлів я показую, як виключити файли.
У тому числі додаткові файли
Додавання додаткових файлів до пакету трохи складніше, але все-таки жодного клопату, якщо вам зручно з MSBuild, і якщо ви цього ще не прочитали. Для цього нам потрібно підключити частину процесу, який збирає файли для упаковки. Ціль, яку нам потрібно розширити, називається CopyAllFilesToSingleFolder. Ця ціль має властивість залежності - PipelinePreDeployCopyAllFilesToOneFolderDependsOn, яку ми можемо використовувати та вводити власну ціль. Таким чином, ми створимо ціль під назвою CustomCollectFiles і введемо її в процес. Ми досягаємо цього наступним чином (пам’ятайте після заяви про імпорт).
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
<CopyAllFilesToSingleFolderForMsdeployDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForMsdeployDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>
Це додасть нашій цілі до процесу, тепер нам потрібно визначити саму ціль. Припустимо, у вас є папка з назвою "Додаткові файли", яка знаходиться на 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 і в атрибуті Включити сказав йому зібрати всі файли в цій папці та будь-яку папку під нею. Якщо випадково вам потрібно виключити щось із цього списку, додайте Exclude
атрибут до _CustomFiles
.
Потім я використовую цей елемент, щоб заповнити елемент FilesForPackagingFromProject. Це предмет, який MSDeploy фактично використовує для додавання додаткових файлів. Також зауважте, що я оголосив метадані значення DestinationRelativePath. Це визначить відносний шлях, який він буде розміщений в пакеті. Тут я використовував оператор Додаткові файли% (RecursiveDir)% (Ім'я файлу)% (Розширення). Це говорить про те, щоб розмістити його в тому самому відносному місці в пакеті, що і в папці "Додаткові файли".
Виключення файлів
Якщо ви відкриєте файл проекту веб-програми, створеної за допомогою VS 2010, внизу, ви знайдете рядок.
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
До речі, ви можете відкрити файл проекту всередині VS. Клацніть правою кнопкою миші на виборі проекту Unload Project. Потім клацніть правою кнопкою миші на завантажений проект і виберіть «Змінити проект».
Ця заява буде включати всі цілі та завдання, які нам потрібні. Більшість наших налаштувань повинні бути після цього імпорту, якщо ви не впевнені, що поставлені, якщо після! Отже, якщо у вас є файли для виключення, є ім'я елемента, ExcludeFromPackageFiles, яке можна використовувати для цього. Наприклад, скажімо, що у вас є файл на ім'я Sample.Debug.xml, який включений у вашу веб-програму, але ви хочете, щоб цей файл був виключений із створених пакетів. Ви можете розмістити фрагмент нижче після цього заяви про імпорт.
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
При оголошенні заповнення цього елемента файли автоматично будуть виключені. Зверніть увагу на використання FromTarget
метаданих тут. Я не вникатиму в це тут, але ви повинні знати, що завжди це вказуйте.