问题
I have a successful build operating. Now I would like to have the build definition publish the site to my staging location. I tried to use a publishing profile that functions correctly from within Visual Studio but that doesn't seem to work with this unique combinations of Visual Studio and TFS. These are my MSBuild arguments:
/tv:14.0 /p:DeployOnBuild=true /p:PublishProfile="profileName.pubxml"
And this is the error returned from the build:
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.
The error seems self-explanatory, but being new to build configurations I need to ask to make sure there aren't other reasons I would get this error.
Did I compose the MSBuild arguments correctly? Would a different set of arguments change the outcome?
I also would like to ask, if this specific IDE combo (i.e. VS2015/TFS2013) is not able to process my publish profile (as seems to be the case), is there an alternate method I can use to incorporate an automatic deploy after the build?
Could a PowerShell script be added to the post build
to perform the FTP upload?
Update: I changed the title and some text to be more reflective of the need.
回答1:
Just as mentioned in the error message FTP is not supported on msbuild command line.
You should switch to a PowerShell solution, you can reference below PS sample to upload the build via FTP. See more details 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!"
You can also reference this article: Deploying Web Sites using TFS Deployer, PowerShell and FTP
Update:
That's just a sample, the $filePath should be your publish path, that means you can use msbuild to publish the website to local or UNC path, then call powershell to copy/upload all the files (including entire folder structure) from that path to FTP server. If above script not worked, you can also reference another script here to upload the entire directory : https://www.kittell.net/code/powershell-ftp-upload-directory-sub-directories/
来源:https://stackoverflow.com/questions/45017998/how-can-i-add-ftp-website-deployment-to-a-vs2015-tfs2013-build-process