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

У меня есть проект веб-приложения в 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

29 ответов

Решение

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

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

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

http://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

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

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

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

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

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

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

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

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

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

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

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

Рассматриваемые типы файлов:.pdf и.rtf.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Matt

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Build > Publish > Profile > New

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

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

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

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

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

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

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

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

Попробуйте выйти из Visual Studio, удалите соответствующий файл pubxml.user в каталоге PublishProfiles, перезапустите VS и опубликуйте. Работал над VS 2019.

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

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

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

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

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

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

Первый:

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

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

Другие вопросы по тегам