我有一个成功的构建操作。现在我想让构建定义将站点发布到我的临时位置。我尝试使用在Visual Studio中正常运行的发布配置文件,但这似乎不适用于Visual Studio和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脚本添加到post build
以执行FTP上传?
更新:我更改了标题和一些文字以更能反映这种需求。
答案 0 :(得分:1)
正如错误消息中所述,msbuild命令行不支持FTP。
您应该切换到PowerShell解决方案,您可以参考下面的PS示例来通过FTP上传构建。查看更多详情here。
$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!"
您还可以参考此文章:Deploying Web Sites using TFS Deployer, PowerShell and FTP
<强>更新强>
这只是一个示例,$ filePath应该是您的发布路径,这意味着您可以使用msbuild将网站发布到本地或UNC路径,然后调用powershell来复制/上传所有文件(包括整个文件夹结构) FTP服务器的路径。如果上面的脚本不起作用,您还可以在此处引用另一个脚本来上传整个目录:https://www.kittell.net/code/powershell-ftp-upload-directory-sub-directories/