Visual studio 2015 如何将FTP网站部署添加到VS2015/TFS2013构建过程

Visual studio 2015 如何将FTP网站部署添加到VS2015/TFS2013构建过程,visual-studio-2015,msbuild,continuous-integration,continuous-deployment,Visual Studio 2015,Msbuild,Continuous Integration,Continuous Deployment,我有一个成功的构建操作。现在我想让构建定义将站点发布到我的暂存位置。我尝试使用一个发布配置文件,它可以在VisualStudio中正常工作,但它似乎无法与VisualStudio和TFS的这种独特组合一起工作。以下是我的MSBuild参数: /tv:14.0 /p:DeployOnBuild=true /p:PublishProfile="profileName.pubxml" 这是生成返回的错误: C:\Program Files (x86)\MSBuild\Microsoft\Visual

我有一个成功的构建操作。现在我想让构建定义将站点发布到我的暂存位置。我尝试使用一个发布配置文件,它可以在VisualStudio中正常工作,但它似乎无法与VisualStudio和TFS的这种独特组合一起工作。以下是我的MSBuild参数:

/tv:14.0 /p:DeployOnBuild=true /p:PublishProfile="profileName.pubxml"
这是生成返回的错误:

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Deploy\Microsoft.Web.Publishing.Deploy.FTP.targets (42): This specific WebPublishMethod(FTP) is not yet supported on msbuild command line.  Please use Visual Studio to publish.
这个错误似乎是不言自明的,但作为构建配置的新手,我需要询问以确保没有其他原因导致此错误

我是否正确编写了MSBuild参数?不同的论点会改变结果吗

我还想问,如果这个特定的IDE组合(即VS2015/TFS2013)无法处理我的发布配置文件,那么是否有其他方法可以用于在构建后合并自动部署

是否可以将PowerShell脚本添加到后期生成以执行FTP上载


更新:我更改了标题和一些文本以更好地反映需要。

正如错误消息中所述,msbuild命令行不支持FTP

您应该切换到PowerShell解决方案,您可以参考下面的PS示例通过FTP上载构建。请参阅更多详细信息

您也可以参考本文:

更新:


这只是一个示例,$filePath应该是您的发布路径,这意味着您可以使用msbuild将网站发布到本地或UNC路径,然后调用powershell将所有文件(包括整个文件夹结构)从该路径复制/上载到FTP服务器。如果上面的脚本不起作用,您也可以在此处引用另一个脚本来上载整个目录:

尝试添加VisualStudioVersion参数,如一篇有趣的文章和链接博客中所述,但遗憾的是似乎没有帮助。它似乎是在与没有收到错误的人交谈,并且param将启用错误反馈。但是这篇文章似乎支持这样一种观点,即MSBuild可能不会执行我的发布配置文件,因为它是FTP,尽管它是一篇旧文章,自那以后情况可能发生了变化。上面第3行,设置$filePath的位置是哪里?链接的Michael Seier的文章非常酷,谢谢!,但他试图上传一个压缩文件,而且他似乎也遗漏了一些步骤。我不清楚他的小费7是如何组合在一起的。在我上传整个网站结构的情况下,我必须告诉脚本我的网站文件/文件夹在哪里;我假设这是通过$filePath进行的,但我看不到$filePath是在哪里分配的。@Alan这只是一个示例,$filePath应该是您的发布路径,这意味着您可以使用msbuild将网站发布到本地或UNC路径,然后调用powershell将所有文件(包括整个文件夹结构)从该路径复制/上载到FTP服务器。你可以检查这是否有效,你也可以参考另一个脚本在这里上传目录:谢谢!最后一个例子是完美的。当然,我还没有完成,因为我需要按照我需要的方式进行调整,但它确实使用FTP上传了我的网站。当我完成为其他与我有相同问题的人提供解决方案时,我将在这里发布我的脚本。关于您发布的第一个脚本,我始终无法通过OpenRead命令;不断得到一个许可错误,我的研究表明这可能是由于多种原因造成的。但是kittell的样本更容易理解,而且它也是“开箱即用”的。又来了!为了结束这篇文章,kittel.net网站上的powershell脚本非常完美。升级到VS/TFS 2017后,构建定义过程得到了极大的改进,一旦我熟悉了该脚本,就可以很容易地按照您的建议集成power shell。谢谢!
$ftpWebRequest = [System.Net.FtpWebRequest]::Create((New-Object System.Uri("ftp://your_ftp_server")))
$ftpWebRequest.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile

$inputStream = [System.IO.File]::OpenRead($filePath)
$outputStream = $ftpWebRequest.GetRequestStream()

[byte[]]$buffer = New-Object byte[] 131072;
$totalReadBytesCount = 0;
$readBytesCount;

while (($readBytesCount = $inputStream.Read($buffer, 0, $buffer.Length)) -gt 0)
{
$outputStream.Write($buffer, 0, $readBytesCount)
$totalReadBytesCount += $readBytesCount
$progress = [int]($totalReadBytesCount * 100.0 / $inputStream.Length)
Write-Progress -Activity "Uploading file..." -PercentComplete $progress -CurrentOperation "$progress% complete" -Status "Please wait."
}
$outputStream.Close();
$outputStream = $null;
Write-Progress -Activity "Uploading file..." -Completed -Status "Done!"