Публикация веб-развертывания с использованием кода VS

В Visual Studio я использую функцию "publish web", чтобы сделать некоторые преобразования web.config и опубликовать проект WebAPI на нашем сервере. Публикация выполняется с помощью Web Deploy.

Теперь, когда я использую код Visual Studio, я потерял эту оснастку. Но я хотел бы продолжить публикацию проекта с помощью Web Deploy. Есть ли способ написать задачу VSCode, которая будет публиковать мой проект?

Visual Studio Publish использует файл [target].pubxml. У меня есть "staging.pubxml" и "production.xml". Они выглядят как файлы MSBuild. Так что, возможно, это просто вопрос выполнения задачи msbuild из кода. Не знаете, с чего начать.

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

Ответ 1

Предполагая, что вы используете последний vscode сейчас (1.7.x). Вы можете использовать Visual Studio Code Runner.

Сначала вам нужно настроить бегун задачи, нажав <F1> и ввести task. Выберите "Задачи": "Настроить запуск задачи".

Новый файл tasks.json будет создан vscode со следующим контентом.

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "0.1.0",
    "command": "msbuild",
    "args": [
        // Ask msbuild to generate full paths for file names.
        "/property:GenerateFullPaths=true"
    ],
    "taskSelector": "/t:",
    "showOutput": "silent",
    "tasks": [
        {
            "taskName": "build",
            // Show the output window only if unrecognized errors occur.
            "showOutput": "silent",
            // Use the standard MS compiler pattern to detect errors, warnings and infos
            "problemMatcher": "$msCompile"
        }
    ]
}

Во-вторых, теперь вам нужно будет добавить новую задачу публикации. С ответом @Rolo вы можете добавить новую задачу в массив tasks:

    {
        "taskName": "publish",
        // Always show errors from builds.
        "showOutput": "always",
        "args": [
            "/p:DeployOnBuild=true",
            "/p:PublishProfile=Test"
        ]
    }

В-третьих, после завершения tasks.json. Вы можете использовать задачу publish, нажав Ctrl + P (или Cmd + P на Mac) и введите task publish.

Ответ 2

Код Visual Studio не имеет интегрированной системы сборки (Web Publish), такой как Visual Studio. Но он выполняет задачу командной строки и Git встроен.

Итак, у вас есть несколько вариантов:

1) Используйте бегун задачи, чтобы начать сборку/публикацию из палитры команд (ctrl + p). Grunt доступен в предварительном просмотре *. Для этого вам нужно вручную script, но как только это будет сделано, с этой точки легко начать выполнение задачи.

(UPDATE: в документах упоминаются другие совместимые задачи, включая: Make, Ant, Gulp, Jake, Rake или MSBuild - - И задачи .settings tasks.json имеют примеры того, как работать с вашими файлами MSBuild. Нажмите ctrl + p type: "Запустите задачу", а затем нажмите "настроить задачи" )

2) Настройте свою систему управления версиями для непрерывной интеграции, чтобы при нажатии обновления на конкретную ветвь она запускает скрипты MSBuild (или другие системы сборки) и публикует для вас сервер. Мы используем Team Foundation Server (TFS) и Git. У нас есть специальная ветка "релиз/мастер", которая настроена для сборки и публикации, когда она получает push. Он также берет некоторую начальную конфигурацию, но после завершения он автоматически. Если у вас нет TFS, попробуйте TFS в Интернете. Есть много других вариантов, но это то, что мы используем.

Я нахожусь в том же положении, в котором вы пытаетесь понять это. Я хотел бы узнать, что вы узнали.

* В соответствии с Deep Dive session на Build 2015. Хотя просмотр файла tasks.json выглядит как Gulp, а примеры MSBuild доступны в Preview.

Ответ 3

Для публикации с использованием MSBuild вам необходимо использовать следующую команду:

msbuild <Project or Solution Path> /p:DeployOnBuild=true /p:PublishProfile=<Publish Profile Name>
  • Вы можете указать на решение, это опубликует ВСЕ проекты, которые включают действительный профиль публикации:

    msbuild <FullPath>\MySolution.sln /p:DeployOnBuild=true /p:PublishProfile=Test
    
  • Вы можете указать конкретный проект следующим образом:

    msbuild <FullPath>\Project1\MyProj.csproj /p:DeployOnBuild=true /p:PublishProfile=Test
    
  • В обоих случаях вы также можете указать полный путь к файлу .pubxml:

    msbuild <FullPath>\MySolution.sln /p:DeployOnBuild=true /p:PublishProfile=<FullPath>\PublishProfiles\Test.pubxml
    

Фактически файлы *.pubxml являются сценариями MSBuild, поэтому вы можете взаимодействовать с ним, как и с любым другим MSBuild script, например, вы можете заменить свойства из командной строки следующим образом:

Test.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:\Deploy\MyProject\</publishUrl>
        <DeleteExistingFiles>True</DeleteExistingFiles>
    </PropertyGroup>
</Project>

    msbuild <FullPath>\MySolution.sln /p:DeployOnBuild=true /p:PublishProfile=<FullPath>\PublishProfiles\Test.pubxml /p:publishUrl:"D:\DifferentPath\DifferentFolder\"

Вы можете использовать эти команды с сервера непрерывной интеграции или любых других скриптов сборки.

Дополнительная информация:

Развертывание командной строки