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

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

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

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

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

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

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

UPDATE:

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

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

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

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

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

Ответ 1

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

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

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

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

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

Отправлено Microsoft на 13.06.2012 в 12:00 PM Привет, Андрей,

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

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

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

Ответ 2

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

Ответ 3

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

NewProfile.pubxml and 
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> node и помещаете его в файл pubxml.user, ваши PublishProfiles снова начнут работать.

Ответ 4

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

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

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

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

Ответ 5

У меня была такая же ошибка, и я меняю настройку с на отладку и проблема решена.

Ответ 6

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

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

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

В качестве типов файлов были файлы .pdf и .rtf.

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

Выберите файл (ы), который не копируется arent. В Свойства убедитесь, что для параметра Сборка установлено значение Контент.

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

В меню Проект выберите Пакет/Публикация Веб и обратите внимание на это:

enter image description here

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

Ответ 7

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

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

Поместите их в свой .pubxml, и вам должно быть хорошо идти.

Ответ 8

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

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

Ответ 9

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

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

Ответ 10

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

Ответ 11

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

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

Ответ 12

Следующие работали для меня:

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

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

Ответ 13

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

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

Ответ 14

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

Ответ 15

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

Убейте опубликовать профили в "Свойствах > Опубликоватьпрофили > xxxx.pubxml" и снова заново настройте.

Ответ 16

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

Здесь gist (буквально):

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), но его можно легко подключить к событию после сборки.

Ответ 17

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

Matt

Ответ 18

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

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

Ответ 19

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

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, дерьмовый ноутбук.

Ответ 20

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

Мы добавили событие pre-build для удаления папки obj: del /s /f /q $(ProjectDir)\obj и исправили проблему публикации. Чистка работает иногда, но не всегда.

Ответ 21

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

Что я сделал, так это то, что я перемещаю проект на диск c, меняя папку проекта на что-то более короткое и быстро публикую.

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

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

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

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

Ответ 22

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

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

Ответ 23

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

Но я заметил, что из наших пяти проектов 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" />

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

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

Ответ 24

Я столкнулся с этим, когда файлы Visual Studio с Service Reference стали слишком длинными с точки зрения общей длины пути.

Сократить их, повторно создав ссылку на службу, используя 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-адресом конечной точки службы.

Ответ 25

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

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

Ответ 26

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

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

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

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

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

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

Ответ 27

Для этого выполните следующие действия:

Build > Publish > Profile > New

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

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

Ответ 28

Во-первых:

  • Создайте конфигурацию выпуска.
  • В свойствах проекта → выберите все файлы и папки в разделе Пакет/Публикация веб-страниц.
  • Восстановить решение (после решения Clean).
  • теперь публикуется.

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

Ответ 29

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

   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!