使用VS Code发布Web Deploy

32
在Visual Studio中,我使用“发布Web”功能来完成一些web.config转换,并将WebAPI项目发布到我们的服务器。发布是使用Web Deploy完成的。
现在我正在使用Visual Studio Code,我失去了那个工具。但是,我仍希望使用Web Deploy继续发布该项目。是否有一种方式编写VSCode任务以发布我的项目?
Visual Studio Publish使用[target].pubxml文件。我有“staging.pubxml”和“production.xml”。这些看起来像MSBuild文件。因此,也许只需从Code执行msbuild任务即可。不过,不确定从何处开始。
另一个想法是我可以启动Web Deploy命令行工具。我从未使用过它,似乎第一个想法更好。

我认为最难的部分是找到正确的命令行。看看这篇博客http://www.gregpakes.co.uk/post/msbuild-publish-profiles-and-web-site-projects。如果你找到了正确的命令行,我可以帮助你在VSCode中定义一个任务。 - Alex Dima
4个回答

20
假设您现在使用的是最新版的vscode(1.7.x),您可以使用Visual Studio Code的任务运行器。
首先,您需要通过按下并输入任务来配置任务运行器。选择“任务:配置任务运行器”。
vscode将创建一个名为tasks.json的新文件,并包含以下内容。
{
    // 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 完成。你可以通过按下 Ctrl+P(或在 Mac 上按下 Cmd+P),然后输入 task publish 来使用 publish 任务。


无法重现您的答案。我相信您正在使用任务的v1版本,而现在Tasks 2.0已经推出了microsoft Task documentation - Razvan
@Răzvan和其他有兴趣的人。这是微软的从“0.1.0”转换到“2.0.0”指南,适用于VS Code任务。 - Jeremy Cook
我没有选项 Tasks: Configure Tasks Runner - Falcon Stakepool

5

为了使用MSBuild发布,您需要使用以下命令:

msbuild <Project or Solution Path> /p:DeployOnBuild=true /p:PublishProfile=<Publish Profile Name>
  • You can point to a solution, this will publish ALL the projects that includes a valid Publish Profile:

    msbuild <FullPath>\MySolution.sln /p:DeployOnBuild=true /p:PublishProfile=Test
    
  • You can point to a specific project like this:

    msbuild <FullPath>\Project1\MyProj.csproj /p:DeployOnBuild=true /p:PublishProfile=Test
    
  • In both cases you can also specify use the full path to the .pubxml file:

    msbuild <FullPath>\MySolution.sln /p:DeployOnBuild=true /p:PublishProfile=<FullPath>\PublishProfiles\Test.pubxml
    
事实上,*.pubxml文件是MSBuild脚本,因此您可以像与任何其他MSBuild脚本交互一样与其交互。例如,您可以像这样从命令行替换属性:

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

你可以从持续集成服务器或其他构建脚本中使用这些命令。 附加信息:

命令行部署


谢谢提供的信息,但问题是关于从Visual Studio Code部署,而不是从命令行部署。 - Madara's Ghost
我根据原始问题的内容“也许只是执行来自Code的msbuild任务的问题。不确定从哪里开始。”和评论中的这段话“我认为最难的部分是找到正确的命令行。查看此博客gregpakes.co.uk/post/…。如果您找到了正确的命令行,我可以帮助您在VSCode中定义一个任务 - Alex Dima”。这对你来说不再是一个选项了吗? - Rolo
我(有点)知道在VS Code中使用命令行任务的选项,但是考虑到VSCode是微软产品(操作系统,但仍然),我想知道它是否有特定的集成。 - Madara's Ghost

5
Visual Studio Code没有像Visual Studio那样集成的构建系统(Web Publish)。但它确实具有命令行任务运行和内置的Git功能。
因此,您有几个选择:
1)使用任务运行器从命令面板(ctrl+p)启动您的构建/发布。Grunt在预览版中可用。这需要您手动编写脚本,但一旦完成,从那时起轻松启动任务。
(更新:文档提到其他兼容的任务运行器,包括:Make、Ant、Gulp、Jake、Rake或MSBuild - .settings tasks.json有如何使您的MSBuild文件工作的示例。按下ctrl+p键,输入"run task",然后单击"configure tasks")

2) 针对持续集成设置您的源代码控制系统,这样当您将更新推送到特定分支时,它将运行MSBuild(或其他构建系统)脚本并为您发布到服务器。我们使用Team Foundation Server(TFS)和Git。我们有一个特定的“release/master”分支,当它接收到推送时,会进行构建和发布。它还需要一些初始配置,但完成后就是自动的。如果您没有TFS,请尝试TFS在线。还有许多其他选择,但那是我们使用的。

我和您一样处于同样的位置,试图弄清楚这个问题。我很想知道您发现了什么。

*根据Build 2015的深度挖掘会议。虽然从tasks.json文件来看,Gulp和MSBuild示例在预览版中可用。


1
谢谢你的这些想法,丹。我已经成功将我的Grunt脚本与命令面板集成了起来。而且,我认为使用MSBuild也不难做到同样的事情。但是我的问题是,我不知道执行那些发布XML文件的命令行应该是什么样子的。这就是我卡住的地方。对于你的第二个想法,那可能是正确的做法,我会把它作为一个长期目标,因为我们已经在使用TFS了。 - AJ Morris

3
你可以使用dotnet publish命令将其部署到本地或远程目录。
对于本地目录:
dotnet publish -c Release -o ./publish

对于远程目录

dotnet publish -c release -p:PublishDir=//serverName/d$/inetpub/wwwroot/appName

dotnet publish 背后调用 MSBuild。

-c configName => 定义构建配置。

-o dirName => 指定输出目录。

-p:PublishDir=> 指定输出目录的复制目录。

了解 dotnet publish 命令,请访问链接

您还可以使用发布配置文件在 VS Code 上使用命令行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接