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. Это решило проблему.
Здесь у нас была такая же проблема.
Мы просто изменили "Метод публикации:" с "Файловая система", например, на "Веб-развертывание", и сразу же изменили его обратно на "Файловая система".
Та же проблема с 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 и затем попытался опубликовать сайт, это привело к пустой опубликованной папке.
На моем обходном пути я нашел решение.
Мастер публикации будет отражать любые ошибки при публикации, но не будет копировать файлы в папку назначения.
Чтобы найти файл, который генерирует ошибку, просто скопируйте содержимое папки веб-сайта в новую папку и запустите Visual Studio с этим веб-сайтом.
Теперь, когда вы попытаетесь опубликовать, вы получите имя файла с ошибками.
Просто исправьте ошибку в исходной папке сайта и попробуйте опубликовать, все будет работать так, как было раньше.
Попробуйте выйти из 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.
- Восстановите решение (после Чистого решения).
- сейчас опубликую.
Во время публикации перепроверьте, что вы выбрали.
это должно сделать это. Это для меня!:)