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

234

У меня есть проект веб-приложения в 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
    Это странно. Если вы видите Публикация папки / ..., она должна работать правильно. Я предлагаю вам проверить свой путь. Убедитесь, что вы смотрите в правильном месте.
  • 0
    Похоже, это работает сейчас. Может быть, перезагрузка VS сделал свое дело. Это то, что я вижу сейчас: 2>Done building project "{Project}.csproj". 2>Deleting existing files... 2>Publishing folder /... 2>Publishing folder bin... 2>Publishing folder Controls... 2>Publishing folder ExternalReferences...
Показать ещё 18 комментариев
Теги:
asp.net-mvc
visual-studio-2012
msbuild-wpp

29 ответов

77
Лучший ответ

Это может быть вызвано решениями/проектами, которые были созданы с помощью 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

  • 8
    Эта проблема возникает для меня в новом проекте Visual Studio 2012. В прошлом он публиковался через FTP, но теперь, когда я пытаюсь опубликовать, он делает то же самое, что и выше - он делает вид, говорит, что был успешным, и ничего не толкает. Он создает выходные данные в obj dir, но фактически никогда не копирует их на сервер. Трюк Изменения конфигурации действительно исправляет это все же.
  • 12
    Привет! Это все еще сломано в SP2!
Показать ещё 7 комментариев
99

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

  • 9
    Это сработало для меня ...
  • 0
    У меня тоже работало
Показать ещё 4 комментария
37

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

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 снова начнут работать.

  • 5
    +1 Мне это показалось. Это немного облегчает задачу, если открыть два файла и сравнить их после создания нового профиля. Я также обнаружил, что оба файла должны быть проверены в системе контроля версий при работе в команде.
  • 0
    @Deano Проблема с проверкой в любом файле * .user заключается в том, что у вас больше нет возможности индивидуальной (локальной) настройки проекта. Смысл пользовательского файла состоит в том, чтобы позволить отдельным членам команды иметь свои собственные локальные настройки.
Показать ещё 5 комментариев
19

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

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

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

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

  • 0
    Это работает для меня, что я делал, чтобы удалить профили на локальной машине и воссоздать их. Это не влияет на другие машины разработки.
  • 0
    У меня была проблема с переключением проекта с vs2013 на vs2012, и это полностью устранило проблему
Показать ещё 2 комментария
9

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

  • 0
    Это решило это и для меня,
7

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

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

  • 0
    Да, с моим удивлением, это сработало. :)
  • 0
    Да, это то, что наконец-то сработало и для меня (попробовал все другие предложения выше). Это с vs2010
7

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

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

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

  • 0
    Ничто не помогло, пока я не попробовал это.
7

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

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

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

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

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

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

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

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

Изображение 5978

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

  • 0
    Это сработало для моей ситуации - когда были опубликованы только некоторые файлы.
  • 0
    Это работало только потому, что файлы не были правильно включены в проект. Посмотрите этот ответ ниже для определения основной причины и решения: stackoverflow.com/a/40721544/3520070
Показать ещё 1 комментарий
5

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

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

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

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

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

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

  • 0
    вау, не могу поверить, что сработало. Благодарю.
4

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

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

  • 0
    Это помогло мне! Спасибо
  • 0
    это должно быть на вершине
Показать ещё 1 комментарий
4

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

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

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

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

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

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

1

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

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

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

Matt

1

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

1

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

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

0

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

Build > Publish > Profile > New

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

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

0

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

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

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

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

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

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

0

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

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

0

Я столкнулся с этим, когда файлы 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-адресом конечной точки службы.

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" />

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

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

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

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

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

0

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

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

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

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

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

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

0

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

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

0

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

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

-1

Во-первых:

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

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

-3

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

   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!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню