Исключение файлов из публикации веб-узла в Visual Studio
можно ли исключить папку или файлы при публикации веб-узла в Visual Studio 2005? У меня есть различные ресурсы, которые я хочу держать под рукой в обозревателе решений, такие как альтернативные файлы конфигурации для различных сред, но я действительно не хочу публиковать их на сервере. Есть ли способ исключить их? При использовании других типов проектов, таких как .dll assembly, я могу установить свойство действия сборки файла в " None "и его копию для вывода свойства каталога в"не копировать". Я не удается найти аналогичные параметры для файлов на веб-узле.
Если IDE не предлагает эту функцию, есть ли у кого-нибудь хорошая техника для обработки таких файлов?
8 ответов:
Если вы можете определить файлы на основе расширения, вы можете настроить это с помощью buildproviders тег в интернете.конфигурации. Добавьте расширение и сопоставьте его с ForceCopyBuildProvider. Например, для настройки .xml-файлы, которые будут скопированы с помощью действия публикации, вы должны сделать следующее:
<configuration>... <system.web>... <compilation>... <buildProviders> <remove extension=".xml" /> <add extension=".xml" type="System.Web.Compilation.ForceCopyBuildProvider" /> </buildProviders>
чтобы сохранить данный файл от копирования, вы бы сделали то же самое, но использовать систему.Сеть.Сборник.IgnoreFileBuildProvider как тип.
вы можете исключить папки и файлы путем добавления
ExcludeFilesFromDeployment
иExcludeFoldersFromDeployment
элементы в файле проекта (.csproj, .vbproj и т. д.). Добавьте их в соответствующиеPropertyGroup
как показано ниже:<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> ... <ExcludeFilesFromDeployment>File1.aspx;Folder2\File2.aspx</ExcludeFilesFromDeployment> <ExcludeFilesFromDeployment>**\.svn\**\*.*</ExcludeFilesFromDeployment> <ExcludeFoldersFromDeployment>Folder1;Folder2\Folder2a</ExcludeFoldersFromDeployment> </PropertyGroup>
подстановочные знаки не поддерживаются.
в приведенном выше примере:
- 1-й ExcludeFilesFromDeployment исключает File1.aspx (в корне проекта) и Folder2\File2.aspx (Folder2 находится в корне проекта)
- 2-й ExcludeFilesFromDeployment исключает все файлы в любую папку .svn и любой из его подпапок
- ExcludeFoldersFromDeployment исключает папки с именем Folder1 (в корне проекта) и Folder2\Folder2a (Folder2 находится в корне проекта)
подробнее:веб-развертывание: исключение файлов и папок через файл проекта веб-приложения
Удивительно, но ответа на Visual Studio 2012 здесь нет:
ответ с зеленой галочкой-это не ответ.
самый высокий" повышенный " ответ ссылается на статью из 2010 года и говорит, что вам нужно отредактировать файл проекта csproj, который теперь неверен. Я добавил XML-элемент ExcludeFoldersFromDeployment в свой файл csproj Visual Studio 2012, и он ничего не сделал, элемент считался недопустимым, это потому, что ExcludeFoldersFromDeployment был перемещен в раздел .pubxml файл, похоже.
для веб-приложений и веб-сайтов изменить .pubxml файл!
вы можете следовать моему ответу или попробовать это руководство, которое я нашел позже: http://www.leniel.net/2014/05/using-msdeploy-publish-profile-pubxml-to-create-an-empty-folder-structure-on-iis-and-skip-deleting-it-with-msdeployskiprules.html#sthash.MSsQD8U1.dpbs
Да, вы можете сделать это не только для веб-проектов, но и для веб-сайтов. Я провел много времени в интернете, ища эту неуловимую возможность исключения с веб-сайтом Visual Studio (а не с проектом веб-сайта), и ранее пришел к выводу, что это невозможно, но похоже это:
в вашем [mypublishwebsitename].файл pubxml, найденный в ~ / Properties / PublishProfiles для проектов веб-приложений и ~ / App_Data / PublishProfiles для веб-сайтов, просто добавьте:
<ExcludeFilesFromDeployment>File1.aspx;Folder2\File2.aspx</ExcludeFilesFromDeployment> <ExcludeFoldersFromDeployment>Folder1;Folder2\Folder2a</ExcludeFoldersFromDeployment>
как дети к главной
<PropertyGroup>
элемент .pubxml файл. Нет необходимости добавлять новый элемент, если вы не используете Ключ определенного типа сборки, например release или debug.НО ПОДОЖДИТЕ!!!
если вы удаляете файлы с вашего конечный / целевой сервер со следующими настройками в конфигурации публикации:
затем процесс веб-публикации удалит на вашем исходном / целевом сервере все исключенное, например элемент, который вы определили в своем
<ExcludeFoldersFromDeployment>
и<ExcludeFilesFromDeployment>
!MsDeploy пропустить правила для спасения:
во-первых, Web Publish использует что-то другое, чем MSBuild для публикации (называется Task IO или что-то в этом роде), но у него есть ошибка и не будет распознавать правила пропуска, поэтому вы должны добавить к своим .pubxml:
<PropertyGroup> <WebPublishMethod>MSDeploy</WebPublishMethod> </PropertyGroup>
я хотел бы сохранить
<WebPublishMethod>
в своем<PropertyGroup>
, вы могли бы подумать, что вы могли бы просто один<PropertyGroup>
элемент .pubxml но мои правила пропуска не вызывались, пока я не переехал<WebPublishMethod>
собственных<PropertyGroup>
элемент. Да, сумасшедший, но тот факт, что вам нужно сделать все это для веб-публикации, чтобы исключить, а также не удалять папку/файл на вашем сервере, сумасшедший.теперь мой настоящий SkipRules, ExcludeFolders и ExcludeFiles объявления в моем .pubxml:
<ExcludeFoldersFromDeployment>Config</ExcludeFoldersFromDeployment> <ExcludeFoldersFromDeployment>Photos</ExcludeFoldersFromDeployment> <ExcludeFoldersFromDeployment>Temp</ExcludeFoldersFromDeployment> <ExcludeFilesFromDeployment>Web.config</ExcludeFilesFromDeployment> <AfterAddIisSettingAndFileContentsToSourceManifest>AddCustomSkipRules</AfterAddIisSettingAndFileContentsToSourceManifest>
а теперь правила пропуска (
<Target>
ребенок<Project>
в свой .pubxml): (вы можете уйти<SkipAction>
пустой, чтобы пропустить все действия, но я не проверял это и не уверен.<Target Name="AddCustomSkipRules"> <Message Text="Adding Custom Skip Rules" /> <ItemGroup> <MsDeploySkipRules Include="SkipConfigFolder"> <SkipAction>Delete</SkipAction> <ObjectName>dirPath</ObjectName> <AbsolutePath>$(_DestinationContentPath)\Config</AbsolutePath> <XPath> </XPath> </MsDeploySkipRules> <MsDeploySkipRules Include="SkipPhotosFolder"> <SkipAction>Delete</SkipAction> <ObjectName>dirPath</ObjectName> <AbsolutePath>$(_DestinationContentPath)\Photos</AbsolutePath> <XPath> </XPath> </MsDeploySkipRules> <MsDeploySkipRules Include="SkipWebConfig"> <SkipAction>Delete</SkipAction> <ObjectName>filePath</ObjectName> <AbsolutePath>$(_DestinationContentPath)\Web\.config</AbsolutePath> <XPath> </XPath> </MsDeploySkipRules> <MsDeploySkipRules Include="SkipWebConfig"> <SkipAction>Delete</SkipAction> <ObjectName>dirPath</ObjectName> <AbsolutePath>$(_DestinationContentPath)\Temp</AbsolutePath> <XPath> </XPath> </MsDeploySkipRules> </ItemGroup> </Target>
и, пожалуйста, не забывайте, чтобы избежать
.
в правиле пропуска пути к файлу с обратной косой чертой.
Я боролся с той же проблемой и, наконец, нажал на курок при преобразовании веб-сайта в веб-приложение. Как только я это сделал, я получил все преимущества IDE, такие как действие сборки, и он скомпилировался быстрее для загрузки (больше нет проверки веб-сайта...).
Шаг 1: преобразуйте свой "веб-сайт" в "веб-приложение". Чтобы преобразовать его, я просто создал новое "веб-приложение", сдул все файлы, которые он создал автоматически, и скопировал и вставил мой веб-сайт. Это сработало отлично. Отмечать для этих файлов отчетов необходимо, чтобы их действие сборки было установлено в "Content" вместо "none".
Шаг 2: Теперь вы можете установить любые файлы "построить действие" свойство.
надеюсь, что это помогает.
в Visual Studio 2013 я нашел ответ кита, добавив
ExcludeFoldersFromDeployment
элемент в файл проекта, не работал (я не читал ответ Брайана Огдена, который говорит об этом). Однако я обнаружил, что могу исключить текстовый файл при публикации в Visual Studio 2013, просто установив следующие свойства самого текстового файла:1) Построить Действие: Нет
2) копировать в выходной Каталог: не копировать
сначала я попытался установить свойство копировать в выходной каталог сам по себе, но это не сработало, когда действие сборки было установлено на значение по умолчанию, Content. Когда я затем установил действие сборки в None, текстовый файл больше не копировался в папку назначения при публикации.
чтобы просмотреть эти свойства в графическом интерфейсе Visual Studio, в обозревателе решений щелкните правой кнопкой мыши файл, который вы хотите исключить, и выберите Свойства из контекстного меню.
Я думаю, что у вас есть только два варианта:
- используйте 'исключить из проекта' особенность. Это не идеально, потому что элемент проекта будет исключен из любые интегрированные операции управления версиями IDE. Вам нужно будет нажать кнопку " Показать все Кнопка файлы в окне решения если вам нужно увидеть файлы в Обозреватель решений, но это тоже показывает файлы и папки, которые вы не интересуюсь.
- используйте сценарий событий после сборки, чтобы удалите все элементы проекта, которые вы Не хотите быть опубликованы (предполагая, что вы публикации в локальную папку, затем загрузка на сервер).
Я прошел через это раньше и не мог придумать ничего по-настоящему элегантно.
функция, которую вы ищете, существует, если ваш проект создан как "веб-приложения". Web сайт "проекты" - это просто набор файлов, которые считаются 1:1 с тем, что развертывается на веб-сервере.
с точки зрения функциональности оба они одинаковы, однако веб-приложение компилирует весь исходный код в DLL, а не голые файлы исходного кода копируются на веб-сервер и компилируются по мере необходимости.
Для Visual Studio 2017,Сервис Публикации, сначала создайте стандартный профиль публикации файловой системы. Перейдите в папку App_Data\PublishProfiles\ и отредактируйте [profilename].pubxml файл.
добавить
<ExcludeFilesFromDeployment>[file1.ext];[file2.ext];[file(n).ext]</ExcludeFilesFromDeployment>
под тегом
<PropertyGroup>
Вы можете указать этот тег только один раз, иначе он будет принимать только последние значения.пример:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <WebPublishMethod>FileSystem</WebPublishMethod> <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> <LastUsedPlatform>Any CPU</LastUsedPlatform> <SiteUrlToLaunchAfterPublish /> <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish> <ExcludeApp_Data>True</ExcludeApp_Data> <publishUrl>C:\inetput\mysite</publishUrl> <DeleteExistingFiles>False</DeleteExistingFiles> <ExcludeFilesFromDeployment>web.config;mysite.sln;App_Code\DevClass.cs;</ExcludeFilesFromDeployment> </PropertyGroup> </Project>
убедитесь, что тег DeleteExistingFiles имеет значение ложные