Большой вопрос. Я только что опубликовал очень подробную запись в блоге об этом на Web Deployment Tool (MSDeploy) : Build Package including extra files or excluding specific files.
Вот краткий обзор. После включения файлов я также показываю, как исключать файлы.
Включая дополнительные файлы
Включая дополнительные файлы в пакет немного сложнее, но до сих пор нет bigee, если вы знакомы с MSBuild, и если вы не то читаете эти строки. Для этого нам нужно подключиться к той части процесса, которая собирает файлы для упаковки. Цель, которую нам нужно расширить, называется CopyAllFilesToSingleFolder. Эта цель имеет свойство зависимости, PipelinePreDeployCopyAllFilesToOneFolderDependsOn, которое мы можем задействовать и внедрить в нашу собственную цель. Таким образом, мы создадим объект с именем CustomCollectFiles и добавим его в этот процесс. Мы достигаем этого со следующим (помните после оператора импорта).
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
<CopyAllFilesToSingleFolderForMsdeployDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForMsdeployDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>
</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 атрибуте сказал это, чтобы забрать все файлы в этой папке и любую папку под ним. Если вам нужно исключить из этого списка, добавьте Exclude
атрибут _CustomFiles
.
Затем я использую этот элемент для заполнения элемента FilesForPackagingFromProject. Это элемент, который MSDeploy фактически использует для добавления дополнительных файлов. Также обратите внимание, что я объявил значение метаданных DestinationRelativePath. Это определит относительный путь, который будет помещен в пакет. Я использовал заявление Extra Files% (RecursiveDir)% (Filename)% (Extension) здесь. То, что это говорит, - разместить его в том же относительном местоположении в пакете, что и в папке «Дополнительные файлы».
исключающие файлы
Если открыть файл проекта веб-приложения, созданного с VS 2010 к нижней части его вы найдете строку с.
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
BTW вы можете открыть файл проекта внутри VS. Щелкните правой кнопкой мыши проект, выбрав «Проект разгрузки». Затем щелкните правой кнопкой мыши на выгруженном проекте и выберите «Редактировать проект».
Это заявление будет содержать все цели и задачи, которые нам нужны.Большинство наших настроек должны быть после этого импорта, если вы не уверены, если после! Поэтому, если у вас есть файлы для исключения, есть имя элемента, ExcludeFromPackageFiles, которое можно использовать для этого. Например, предположим, что у вас есть файл с именем Sample.Debug.js, который включен в ваше веб-приложение, но вы хотите, чтобы этот файл был исключен из созданных пакетов. Вы можете поместить сниппет ниже после этого оператора импорта.
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
Объявление путем заполнения этого элемента автоматически исключается. Обратите внимание на использование метаданных FromTarget. Я не буду вдаваться в это здесь, но вы должны знать, чтобы всегда указывать это.
Не могли бы вы расширить ваш пример, чтобы включить дополнительный выпуск проекта в публикацию? –
Есть ли способ получить диагностическую информацию о файлах, которые (или в моем случае не включены) цели? Я задал это как новый вопрос: http://stackoverflow.com/questions/11557915/debugging-msbuild-actions – Overflew
@SayedIbrahimHashimi Можете ли вы использовать эту технику для включения двух наборов файлов? –