У меня есть проект ac # .Net 4.0, созданный с помощью VS2010, и теперь доступ к нему осуществляется с помощью VS2012.
Я пытаюсь опубликовать только необходимые файлы с этого веб-сайта в место назначения (C: \ builds \ MyProject [Files])
Моя файловая структура: ./ProjectRoot/MyProject.csproj ./ProjectRoot/Properties/PublishProfiles/FileSystemDebug.pubxml
Я запускаю через MSBuild следующее:
C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ MSBuild.exe ./ProjectRoot/MyProject.csproj / p: DeployOnBuild = true /p:PublishProfile=./ProjectRoot/Properties/PublishProfiles/FileSystemDebug.pubxml
Вот xml в FileSystemDebug.pubxml
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>FileSystem</WebPublishMethod>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<ExcludeApp_Data>False</ExcludeApp_Data>
<publishUrl>C:\builds\MyProject\</publishUrl>
<DeleteExistingFiles>True</DeleteExistingFiles>
</PropertyGroup>
</Project>
В результате поведение:
- здесь создается zip-файл: ./ProjectRoot/obj/Debug/Package/MyProject.zip
- В
<publishUrl>C:\builds\MyProject\</publishUrl>
WTF ничего не разворачивается - Создаваемый zip-файл представляет собой скучный завтрак, полный файлов, которые не нужны приложению.
Когда я запускаю этот профиль публикации через Visual Studio, создается папка в * C: \ builds \ MyProject * и содержит именно те артефакты, которые мне нужны.
Как мне получить этот простой результат из msbuild?
источник
Condition="false"
существует для обратной совместимости. VS2010 требует, чтобы этот импорт существовал, даже если он пропущен из-за условия ложности. Если вы посмотрите еще раз, то увидите, что csproj содержит еще один импорт, для$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets
которого разрешается файл target для текущей версии Visual Studio.$(MSBuildToolsVersion)
в пути к учетной записи для правильной версии VS:<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(MSBuildToolsVersion)\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
. Это сработало для меня в обновлении 1 VS2015Нашел ответ здесь: http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild
<Target Name="PublishToFileSystem" DependsOnTargets="PipelinePreDeployCopyAllFilesToOneFolder"> <Error Condition="'$(PublishDestination)'==''" Text="The PublishDestination property must be set to the intended publishing destination." /> <MakeDir Condition="!Exists($(PublishDestination))" Directories="$(PublishDestination)" /> <ItemGroup> <PublishFiles Include="$(_PackageTempDir)\**\*.*" /> </ItemGroup> <Copy SourceFiles="@(PublishFiles)" DestinationFiles="@(PublishFiles->'$(PublishDestination)\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="True" /> </Target>
msbuild Website.csproj "/p:Platform=AnyCPU;Configuration=Release;PublishDestination=F:\Temp\Publish" /t:PublishToFileSystem
источник
По-прежнему возникли проблемы после попытки ответить на все приведенные выше ответы (я использую Visual Studio 2013). В папку публикации ничего не скопировано.
Загвоздка заключалась в том, что если я запускаю MSBuild с отдельным проектом вместо решения, мне нужно добавить дополнительный параметр, указывающий версию Visual Studio:
/p:VisualStudioVersion=12.0
12.0
предназначен для VS2013, замените его версией, которую вы используете. Как только я добавил этот параметр, все заработало.Полная командная строка выглядит так:
MSBuild C:\PathToMyProject\MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=MyPublishProfile /p:VisualStudioVersion=12.0
Я нашел это здесь:
http://www.asp.net/mvc/overview/deployment/visual-studio-web-deployment/command-line-deployment
Они заявляют:
источник
Мне кажется, что ваш профиль публикации не используется и выполняет некоторую упаковку по умолчанию. Цели Microsoft Web Publish делают все, что вы делаете выше, они выбирают правильные цели на основе конфигурации.
Я заставил свою работать без проблем на этапе TeamCity MSBuild, но я указал явный путь к профилю, вам просто нужно называть его по имени без .pubxml (например, FileSystemDebug). Пока он будет находиться в стандартной папке, которая есть у вас.
Пример:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe ./ProjectRoot/MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=FileSystemDebug
Обратите внимание, что это было сделано с использованием версий Visual Studio 2012 целевых объектов Microsoft Web Publish, обычно расположенных в «C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web». Ознакомьтесь с папкой развертывания для конкретных используемых типов развертывания.
источник
К вашему сведению: та же проблема с запуском на сервере сборки (Jenkins с установленным msbuild 15, управляемый из VS 2017 в веб-проекте .NET Core 2.1).
В моем случае это было использование цели "publish" с msbuild, которая игнорировала профиль.
Итак, моя команда msbuild началась с:
msbuild /t:restore;build;publish
Это правильно запустило процесс публикации, но никакая комбинация или вариант «/ p: PublishProfile = FolderProfile» никогда не помогала выбрать профиль, который я хотел использовать («FolderProfile»).
Когда я перестал использовать цель публикации:
msbuild /t:restore;build /p:DeployOnBuild=true /p:PublishProfile=FolderProfile
Я (по глупости) думал, что это не будет иметь никакого значения, но как только я использовал переключатель DeployOnBuild, он правильно поднял профиль.
источник
На самом деле я объединил все ваши ответы в свое собственное решение, как решить указанную выше проблему:
Результат такой:
msbuild /t:restore /t:build /p:WebPublishMethod=FileSystem /p:publishUrl=C:\builds\MyProject\ /p:DeleteExistingFiles=True /p:LastUsedPlatform="Any CPU" /p:Configuration=Release
источник
Сначала проверьте версию Visual Studio на компьютере разработчика, на котором можно опубликовать решение (проект). как показано для VS 2013
добавьте указанную выше командную строку, чтобы указать, какая версия Visual Studio должна создавать проект. Как и в предыдущих ответах, это может произойти, когда мы пытаемся опубликовать только один проект, а не все решение.
Итак, полный код будет примерно таким
"C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ msbuild.exe" "C: \ Program Files (x86) \ Jenkins \ workspace \ Jenkinssecondsample \ MVCSampleJenkins \ MVCSampleJenkins.csproj" / T: Build; Package / p : Configuration = DEBUG / p: OutputPath = "obj \ DEBUG" / p: DeployIisAppPath = "Веб-сайт по умолчанию / jenkinsdemoapp" /p:VisualStudioVersion=12.0
источник
MSBuild C:\PathToMyProject\MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=MyPublishProfile /p:VisualStudioVersion=12.0
Этот параметр - это то, что мне не хватало, и я решил мою проблему. Вам просто нужно полностью указать ответ!