Я в настоящее время пытаюсь использовать Visual Studio, которую 2010 'Публикует' и функциональность MSDeploy для обработки моих веб-потребностей развертывания, но столкнулся с контрольно-пропускным пунктом относительно настройки пакета в зависимости от моей конфигурации сборки.
Я разрабатываю в среде на 32 бита, но должен создать пакет выпуска для среды на 64 бита, таким образом, в конфигурации 'Выпуска' у меня есть событие сборки сообщения, которое копирует версию на 64 бита стороннего dll в каталог bin, перезаписывающий версию на 32 бита. Когда я использую 'Опубликовать' функциональность, даже при том, что корректные 64 бита dll копируются в каталог bin, это не становится включенным в пакет.
Существует ли способ заставить 'Публикование' включать файлы, которые были скопированы в каталог bin во время события сборки сообщения?
Я ответил на аналогичный, но другой вопрос на Как включить дополнительные файлы с помощью пакетов веб-развертывания VS2010? .
В вашем сценарии вы используете событие post build, я бы рекомендовал отбросить событие post build и реализовать ваши действия с использованием ваших собственных целей MSBuild вместо события post build. Ниже вы найдете текст другого ответа.
От: Как включить дополнительные файлы с помощью пакетов веб-развертывания 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. Я не буду здесь вдаваться в подробности, но вы всегда должны это указывать.
Я нашел способ решения проблемы, используя элемент ExcludeFilesFromDeployment
в файле проекта. Я получил эту идею из Веб-развертывание: исключение файлов и папок
Поэтому, если вам нужно упаковать файлы проекта в том виде, в каком они существуют в каталоге вашего проекта, после успешной сборки и связанных шагов пост-сборки, выполните следующие действия.
PropertyGroup
к настройке конфигурации, например "Release" В элементе PropertyGroup
добавьте следующие элементы и исключите файлы и папки, которые вам не нужны в пакете
* .cs; ** \. Svn \ ** \ *. *; Интернет. *. Config; *. Csproj *
.svn; Контроллеры; Задачи начальной загрузки; Свойства
Сохраните и перезагрузите ваш проект.
Это решает мою проблему на данный момент, но если есть лучшее решение, дайте мне знать, так как это не идеально из-за задействованного взлома, но опять же, возможно, это необычный сценарий развертывания?