Visual Studio 2012 Web Publish не копирует файлы


229

У меня есть проект веб-приложения в VS 2012, и когда я использую инструмент веб-публикации, он успешно создается, но не копирует файлы в целевой объект публикации (в данном случае, Файловая система).

Если я посмотрю на выходные данные сборки, то увижу, что все правильно копируется в obj \ Release \ Package \ PackageTmp \, но затем все, что я вижу в результатах сборки, это:

4> Готово строительный проект "{Project} .csproj".
4> Удаление существующих файлов ...
4> Папка публикации / ...
4> ========== Построение: 3 выполнено успешно, 0 не выполнено, 1 обновлено, 0 пропущено ===== =====
========== Опубликовать: 1 выполнено успешно, 0 не выполнено, 0 пропущено ==========

Несмотря на то, что публикация прошла успешно, в целевой директории нет файлов для публикации.

Я видел это в нескольких проектах, и иногда кажется, что конфигурации решения / платформы вызывают эту проблему, но я не смог точно определить точную причину этого.

Кто-нибудь еще видел, что это происходит, или есть идея, как заставить это работать правильно?

ОБНОВИТЬ:

Возможно, я нашел обходной путь для этого. Я просто повторил это, и я возился с настройками публикации. Как только я изменил выбранную Конфигурацию на вкладке Настройки на другую, а затем вернулся к той, которую хотел использовать, все мои файлы снова начали публиковать. Надеюсь, что это работает на других проектах в будущем.

ОБНОВЛЕНИЕ 2:

Я опубликовал ошибку в Microsoft Connect и получил ответ от разработчика из команды VS Web Developer. Он сказал, что они исправили эту проблему в своих внутренних сборках и скоро выпустят обновление для инструмента публикации, который исправит эту проблему.

ОБНОВЛЕНИЕ 3:

Это было недавно исправлено в Visual Studio 2012 Update 2


1
Это странно. Если вы видите Публикация папки / ..., она должна работать правильно. Я предлагаю вам проверить ваш путь. Убедитесь, что вы смотрите в правильном месте.
Maxisam

14
Это случилось со мной в Windows 8 с Visual Studio 2012. Я только что создал новый профиль публикации, и он работает! Вероятно, ошибка в VS 2012.: /
T.Ho

3
У меня такая же проблема. Удаление и воссоздание профиля публикации помогло мне.
Томми Якобсен

3
Удаление и воссоздание профилей сделали свое дело для меня.
Майкл Уэллс

3
Это не было исправлено ни в Visual Studio Update 2, ни в Update 3. Проверьте самый популярный ответ после «принятого ответа» (что не является решением). Просто отредактируйте профиль и - на вкладке «Настройки» - выберите правильную конфигурацию из списка (если выпуск хороший, выберите отладку, сохраните, затем снова отредактируйте и выберите выпуск). Сохраните и опубликуйте.
firepol

Ответы:


78

Это может быть вызвано решениями / проектами, которые были созданы с RC vs2012. Это случилось со мной несколько месяцев назад и устранило проблему, убедившись, что конфигурации моего решения соответствуют конфигурациям моего проекта ...

Я только недавно столкнулся с той же проблемой при открытии того же решения, первоначально созданного в vs2012RC с VS2012 Express для Web. Я сделал именно то, что предложил оригинальный плакат, и это решило мою проблему.

Вот нить, которая приводит меня к ответу:

connect.microsoft.com/VisualStudio/feedback/details/746321/publish-web-application-fails

Соответствующий ответ от разговора выше, который помог мне, был:

Написал Microsoft 13.06.2012 в 12:00. Привет, Эндрю!

Это было ошибкой в ​​том, как мы справляемся с конфигурацией решения и конфигурацией проекта. Мы ошибочно полагали, что они будут одинаковыми (например, в Solution | Release | x86 для каждого проекта также будет установлен Release | x86), что заставило нас использовать неправильные свойства сборки для публикации файлов.

Обходной путь заключается в согласовании конфигурации решения и конфигурации сборки. Эта проблема будет исправлена ​​в следующем выпуске Visual Studio 2012.

Спасибо, - Джимми Льюис SDET, команда разработчиков Visual Web


8
Эта проблема возникает для меня в новом проекте Visual Studio 2012. В прошлом он публиковался через FTP, но теперь, когда я пытаюсь опубликовать, он делает то же самое, что и выше - он делает вид, говорит, что был успешным, и ничего не толкает. Он создает выходные данные в obj dir, но фактически никогда не копирует их на сервер. Трюк с изменением конфигурации всё же исправляет это.
Крис Москини

12
Привет! Это все еще сломано в SP2!

6
У меня была та же проблема, и я понял, что это потому, что для параметров публикации по умолчанию установлено значение «Любой ЦП», но мое решение настроено на «x86». Изменение настроек в публикации на x86 решило проблему.
Сэм

Ни одно из решений выше не работает для меня. Удаление профилей и воссоздание, изменение конфигурации и изменение обратно, перезапуск VS, перестроить все и т. Д. Я создал новый вид в моем приложении. Это здесь. Я вижу его. Когда я бегу локально, это отображается. Когда я публикую, это не там. У меня есть обновление 4.
Роберт

Единственное, что работает для меня, это удаление моего вида из проекта и добавление снова. Кажется, разбудить IDE до того, что здесь есть что-то новое. Так что везде, где VS отслеживает, могут быть задействованы дополнения и вычитания проекта.
Роберт

104

Та же проблема. Обходным путем было изменение параметров публикации с выпуска на отладку. Повторно опубликовать, а затем вернуться к выпуску ...


ДА! Это хороший ответ. В моем случае я не использую профили «Release» или «Debug» по умолчанию, а «DEV», «STAGE» и «LIVE». Я видел, что, например, для STAGE на компьютере коллеги, который загрузил мое решение через TFS, профиль был неправильно установлен на «Release» (то же самое для всех других профилей). Поэтому мне просто пришлось исправить это и указать «STAGE» (или DEV / LIVE для остальных). Публикация сработала. Спасибо.
firepol

Работал как шарм. Это должен быть принятый ответ.
Айкан Яшит

39

Чтобы сделать это немного дальше. У вас есть два файла, которые создаются при создании профиля публикации.

  • NewProfile.pubxml
  • NewProfile.pubxml.user

Когда вы открываете проект, в котором эти файлы находятся в папке PublishProfile из элемента управления исходным кодом, он имеет только .pubxmlфайл, а не .publxml.userфайл, поэтому он создает .publxml.userфайл на лету при открытии проекта. Когда он создает новый .publxml.userна лету, XML выглядит так:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>

Когда вы создаете новый профиль, он создает XML, который выглядит следующим образом:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <TimeStampOfAssociatedLegacyPublishXmlFile />
    <EncryptedPassword />
  </PropertyGroup>
</Project>

Если вы возьмете <PropertyGroup>узел и поместите его в .pubxml.userфайл, ваши PublishProfiles снова начнут работать.


5
+1 Мне это показалось. Это немного облегчает задачу, если открыть два файла и сравнить их после создания нового профиля. Я также обнаружил, что оба файла должны быть проверены в системе контроля версий при работе в команде.
Деано

@Deano Проблема с проверкой в ​​любом файле * .user заключается в том, что у вас больше нет возможности индивидуальной (локальной) настройки проекта. Смысл пользовательского файла состоит в том, чтобы позволить отдельным членам команды иметь свои собственные локальные настройки.
Дейв Ридл

Есть ли другое решение вместо добавления файла «.pubxml.user» в систему контроля версий?
Ubikuity

Мы не передаем файлы * .user в систему контроля версий, но, между прочим, мы не используем профиль публикации в Visual Studio, поскольку наш сервер Continuous Integration и процесс сборки управляют всем этим ...
Бретт Ригби,

21

Легкое решение - удалить свой профиль публикации и создать новый.

когда вы щелкаете правой кнопкой мыши по вашему решению и выбираете опубликовать, у вас есть набор профилей. удалите это и создайте новый.

это исправит это.

У меня была эта проблема с переключения с 2010 на 2012


Это работает для меня, что я делал, чтобы удалить профили на локальной машине и воссоздать их. Это не влияет на другие машины разработки.
Жан Хименес

У меня была проблема с переключением проекта с vs2013 на vs2012, и это полностью
устранило

Это сработало для меня. Я использовал эти шаги для перестройки моего (файловой системы) профиля публикации: stackoverflow.com/a/20616521/381082
DeveloperDan


8

У меня была такая же проблема, однако ни один из ответов в этой теме не работал для меня. Моя проблема заключалась в том, что существует каталог, который содержит динамически генерируемые (моим приложением) статические файлы HTML. Весь каталог не был опубликован.

Решение, которое сработало для меня, было найдено здесь :

Одна проблема, которую я получил некоторое время назад и подумала, что я должен задокументировать, заключалась в том, что определенные типы файлов не загружались при публикации моего проекта.

Обсуждались следующие типы файлов: .pdf и .rtf.

Это произошло потому, что эти расширения файлов не были определены как требующие публикации в Visual Studio. К счастью, это можно изменить в Visual Studio.

Выберите файлы, которые не копируются. В свойствах убедитесь, что для параметра « Build Action» установлено значение « Content» .

Если это не работает, можно попробовать следующее.

В меню « Проект» выберите « Упаковка / публикация в Интернете» и обратите внимание на это раскрывающееся меню:

введите описание изображения здесь

Попробуйте изменить это на Все файлы в этой папке проекта.


Это сработало для моей ситуации - когда были опубликованы только некоторые файлы.
AndrewRalon

Это работало только потому, что файлы не были правильно включены в проект. Посмотрите этот ответ ниже для определения основной причины и решения: stackoverflow.com/a/40721544/3520070
AndrewRalon

Какой ответ ниже вы имеете в виду?
Томас Кубес

7

Это потому, что .pubxml.user содержит необходимую информацию для публикации, и этот файл не (и не должен) быть включен в систему контроля версий. Чтобы исправить эту ошибку VS, скопируйте информацию из файла .pubxml.user в файл .pubxml. Соответствующие свойства:

<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>

Поместите их в свой .pubxml, и вам будет хорошо.


7

Я попробовал все эти решения, но это то, что работает каждый раз.

Мы просто изменили «Метод публикации:» с «Файловая система», например, на «Веб-развертывание», и сразу же изменили его обратно на «Файловая система».


Да, это то, что наконец-то сработало и для меня (попробовал все остальные предложения выше). Это с vs2010
Карен

5

У меня была (была) та же самая проблема для нескольких проектов. Похоже, что единственными хитами являются веб-проекты. Удаление и воссоздание профиля решает проблему только один раз. Кроме того, сравнение сгенерированного publishxml не дает никаких отличий, поэтому оно вообще не имеет отношения к профилю.

Обходное решение, упомянутое OP для изменения проблем сборки назад и вперед, кажется единственным надежным решением в настоящее время.


Тот же обходной путь был единственным решением для меня. Чтобы уточнить, шаги: Build> Publish. Выберите вкладку «Настройки» слева. Измените конфигурацию сборки на что-нибудь еще. Теперь вы увидите звездочку (*) рядом с именем профиля публикации - это признак того, что ошибка была устранена. Измените конфигурацию сборки обратно на то, что вы хотели. Продолжайте публикацию как обычно. Исправлена.
Крис Москини

4

Я столкнулся с той же проблемой на VS 2010, после проверки выходных данных публикации, журналов событий, включения и проверки визуальных журналов студии и т. Д. Затем я решил удалить веб-публикацию (с помощью добавления / удаления), которая, как мне кажется, была недавно обновлена ​​до v1. 0.30810.0. Это решило проблему.


2
У нас была эта проблема, которая, по-видимому, была связана с файлом pubxml.user в папке PublishProfiles в разделе « Мой проект» - у меня был машинно-генерируемый список файлов для публикации, хотя в документации сказано, что этот файл предназначен только для настроек, относящихся ко мне ( и, следовательно, не помещается в систему контроля версий). Я был в состоянии опубликовать в порядке. Мой коллега взял новую копию нашего исходного кода и не смог опубликовать - когда его файл pubxml.user был сгенерирован, никаких файлов не было в списке. Мы удалили обновленную веб-публикацию, и все снова в порядке.
Ник

4

Здесь у нас была такая же проблема.

Мы просто изменили «Метод публикации:» с «Файловая система», например, на «Веб-развертывание», и сразу же изменили его обратно на «Файловая система».


это должно быть на вершине
JoeBrockhaus

Это теперь исправлено в Visual Studio 2012 Обновление 3
KoalaBear

4

У меня сработало следующее:

Просто перейдите из Release> Debug> Release (или наоборот) и затем опубликуйте.

Нет необходимости удалять, редактировать, публиковать все, что вам не нужно.


4

Моя проблема была в неправильной конфигурации файла myproject.csproj. Файл '_address-step1-store.cshtml' не был скопирован при публикации. «Нет» изменилось на «Контент», теперь все в порядке. введите описание изображения здесь


ЭТО БЫЛО! В проекте было много файлов, которые были проверены в системе контроля Noneверсий , но были помечены как в файле .csproj или полностью отсутствовали в проекте (там, но не «использовались»)! Это полностью объясняет, почему запуск всегда выполнялся локально, а публикация - никогда. : D
AndrewRalon

3

Та же проблема с VS 2012 Pro с целью публикации диска. Проект использовал для правильной публикации, но начал делать эту проблему, где он не смог скопировать файлы в папку назначения.

Решение состояло в том, чтобы отредактировать профиль публикации, изменить режим с выпуска (любой процессор) на отладку, а затем обратно на выпуск (любой процессор). В результате этого файл PublishProfiles \ projname.pubxml.user будет перезаписан (как описано выше). Похоже, он добавил элементы LastUsedBuild, LastUsedPlatform и TimeStampOfAssociatedLegacyPublishXmlFile в узле группы свойств. После завершения публикации добавляется еще одна группа товаров с отдельными файлами и временем публикации.


1

Это действие было успешным для меня:

Убейте Профили публикации в «Свойства> PublishProfiles> xxxx.pubxml» и заново настройте параметры.


1

Что бы это ни стоило, я в конце концов перестал бороться с Web Deploy, чтобы заставить его делать то, что я хотел (копировать развертываемые файлы и ничего больше), поэтому я написал его в PowerShell и действительно доволен результатом. Это много быстрее, чем все, что я пробовал через MSBuild / Web Publish, вероятно потому, что эти методы все еще делали вещи, которые мне не нужны.

Вот суть ( буквально ):

function copy-deployable-web-files($proj_path, $deploy_dir) {
  # copy files where Build Action = "Content" 
  $proj_dir = split-path -parent $proj_path
  [xml]$xml = get-content $proj_path
  $xml.Project.ItemGroup | % { $_.Content } | % { $_.Include } | ? { $_ } | % {
    $from = "$proj_dir\$_"
    $to = split-path -parent "$deploy_dir\$_"
    if (!(test-path $to)) { md $to }
    cp $from $to
  }

  # copy everything in bin
  cp "$proj_dir\bin" $deploy_dir -recurse
}

В моем случае я вызываю это в среде CI (TeamCity), но это также можно легко подключить к событию после сборки.


1

Я обнаружил, что могу обойти эту проблему, изменив целевое местоположение с obj / [release | stage | ..] на новый путь вне папок решения, например c: \ deploy. Кажется, что VS 2012 запутался и, возможно, сдался где-то в процессе публикации.

Matt


1

Недавно в VS 2013 возникла такая же проблема для проекта MVC, в который я импортировал Umbraco CMS. Я не мог опубликовать. Ответ выше помог, хотя мне нужно было время, чтобы выяснить, что я на самом деле должен делать в VS. Чтобы выяснить это, потребовалось некоторое исследование, например, на блогах MS. Я пытаюсь сказать это просто:

  • Выберите на панели инструментов VS определенную конфигурацию, например, Release и Any CPU. Запустите проект.
  • Затем щелкните правой кнопкой мыши в обозревателе решений соответствующего решения и выберите «Опубликовать». Создайте новый профиль публикации или используйте заданный профиль, но всегда убедитесь, что в настройках выбрана та же конфигурация (например, Release и Any CPU), как и до запуска проекта в последний раз.
  • Кроме того, в моем случае было необходимо удалить папку OBJ, потому что здесь застряли настройки из моих последних неудачных попыток публикации, хотя я перезапустил VS и удалил все профили публикации.

0

У меня есть веб-приложение с несколькими другими ссылочными проектами в решении. В прошлом я успешно развертывал одну конфигурацию публикации. Я изменил конфигурацию проекта с Debug на Release для проекта, который пропустил в прошлом. В следующий раз, когда я попытался выполнить развертывание, у меня появились эти симптомы, когда публикация тихо завершается сбоем - она ​​ничего не делает и говорит, что успешно:

1>------ Build started: Project: Project, Configuration: DeployProduction Any CPU ------
1>  
2>Publishing folder /...
========== Build: 1 succeeded, 0 failed, 9 up-to-date, 0 skipped ==========
========== Publish: 1 succeeded, 0 failed, 0 skipped ==========

Единственный способ восстановить его - стереть профиль публикации, закрыть Visual Studio, чтобы заставить его сохранить удаление, снова открыть его и заново создать профиль публикации с нуля. Как только я это сделал, я снова смог опубликовать.

Win8 VS2012, дерьмовый ноутбук.


0

В Visual Studio 2012 переключение между выпусками по-прежнему вызывает проблемы.

Мы добавили событие перед сборкой, чтобы удалить objпапку, del /s /f /q $(ProjectDir)\objи это исправило проблему публикации. Очистка работает иногда, но не всегда.


0

Я наконец нашел ответ самостоятельно. Все вышеперечисленные решения не работают для меня.

Что я сделал, так это то, что я переместил проект на диск, изменил папку проекта на что-то более короткое и увеличил публикацию.

причина, по которой он потерпел неудачу на моей стороне, состоит в том, что у меня было очень длинное имя проекта / иерархия.

C: \ Users \ user \ Desktop \ Система управления соответствием \ ComplianceIssueManagementSystem \ ComplianceIssueManagementSystem

Я думал об этом, потому что иногда, когда я извлекаю RAR-файл, он говорит, что имя / путь слишком длинный. Я думал, что это будет так же, как визуальная студия 2012 года опубликовать. и это делает!

надеюсь, это поможет вам, ребята.


0

Проверьте текущий проект на предмет того, сделали ли вы обратную копию с тем же именем класса и другим именем страницы (имя класса будет наследовать скопированный файл). В конечном итоге это запутает компилятор !!!

CodeFile = "Consolidated.aspx.vb" Inherits = "Consolidated


0

Ни одно из вышеперечисленных решений не помогло мне.

Но я заметил, что из пяти наших проектов ASP.NET MVC в нашем основном решении четыре из них поместили пакет развертывания в нужное место, а один оставил его под obj \ Debug.

Я сравнил проекты и обнаружил несоответствие. Решение было изменить это :

<Import
    Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

к этому :

<Import
  Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets"
  Condition="'$(VSToolsPath)' != ''" />
<Import
  Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets"
  Condition="false" />

После того как я внес это изменение, все пять проектов разместили свои пакеты развертывания в нужном месте.

(Извините за длинные строки, но я не смог найти лучшего способа их сжать.)


Я сталкиваюсь с ситуацией, когда файл или два, кажется, пропускаются и не публикуются на сервере, но мой файл .vbproj уже содержит оба предложенных вами элемента <Import>
bkwdesign,

0

Я столкнулся с этим с Студией генерируемой Визуальной справочной службы файлы стали слишком длинными с точки зрения общей длины пути.

Сократил их, заново сгенерировав ссылку на службу с помощью svcutil.exe, удалив все исходные файлы ссылки на службу.

svcutil можно назвать так:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\SvcUtil.exe" /language:CS http://myservice /namespace:*,My.Namespace

My.Namespace следует заменить существующим пространством имен в сгенерированном прокси-сервере службы (обычно находится в файле Reference.cs), чтобы избежать ошибок компиляции.

http://myservice должен быть заменен URL-адресом конечной точки службы.


0

У меня такая же проблема. Ни одно из вышеперечисленных решений не помогло мне.

Итак, я исключил файлы, которые не удалось скопировать при публикации.


0

Я опубликовал сайт несколько раз. Но однажды, когда я изменил какой-то файл aspx и затем попытался опубликовать сайт, это привело к пустой опубликованной папке.

На моем обходном пути я нашел решение.

  1. Мастер публикации отразит любую ошибку при публикации, но не скопирует файл в папку назначения.

  2. Чтобы найти файл, который генерирует ошибку, просто скопируйте содержимое папки веб-сайта в новую папку и запустите Visual Studio с этим веб-сайтом.

  3. Теперь, когда вы попытаетесь опубликовать, вы получите имя файла с ошибками.

  4. Просто исправьте ошибку в исходной папке сайта и попробуйте опубликовать, она будет работать так же, как и раньше.


0

Выполните следующие шаги, чтобы решить:

Build > Publish > Profile > New

Создайте новый профиль и настройте его с теми же настройками, что и существующий профиль.

Проект теперь будет публиковаться правильно. Это часто происходит в результате контролируемого источником профиля публикации с другого компьютера, который был создан в более новой версии Visual Studio.


0

ИСПРАВЛЕНО - различные предлагаемые решения не работают для меня. Что меня устраивало в VS Community 2017, Windows Server 2012 R2, так это изменение переменных среды TEMP и TMP для пользователя, а затем перезапуск системы и повторное развертывание (перезапуска VS было недостаточно). Эти временные переменные - то, где VS публикует временную переменную.

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

Перезапуск Visual Studio после изменения временных переменных не сработал, пришлось перезагрузить систему.


-1

Первый:

  • Построить в конфигурации выпуска.
  • В Project Properties-> page выберите Все файлы и папки в Package / Publish Web.
  • Восстановить решение (после Чистого решения).
  • сейчас опубликую.

Во время публикации перепроверьте, что вы выбрали.
это должно сделать это. Это для меня! :)


-2

Самый простой

   1. select the file(s) that are not being copied,
   2. Press <F4> to get the properties window
   3. Make the "Build Action" property "compile" or "content" depending on what it is.
   4. Now this particular file will be included!
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.