2016-08-22 12 views
0

プライベートギャラリー(Inmeta Visual Studio Gallery Service)を使用して、PowerShellを使用して新しい/更新されたVisual Studio拡張機能のアップロードを自動化できますか?PowerShellを使用してプライベートギャラリーにVsixをアップロード

これはビルドパイプラインのビルドステップとして追加することを意図しています。

+1

そのギャラリーはそうすると、ポストを受け入れる場合。 Mads Kristensenはgithubに関するいくつかのスクリプトを持っています(彼のopenvisxギャラリーではudeのために) – ErikEJ

+0

もちろん! MadsがGithubのギャラリー(https://github.com/madskristensen/ExtensionGallery/tree/master/src/ExtensionGallery)のソースを持っていることに気づかなかったとは思えません。私はInmetaから彼に切り替えるつもりだと思う。 –

答えて

0

埋め込みPowerShellでのC#、これは(http://www.codeproject.com/Articles/8600/UploadFileEx-C-s-WebClient-UploadFile-with-more-fuに基づいて)動作します:

$source = @" 
using System; 
using System.Collections.Specialized; 
using System.IO; 
using System.Net; 
using System.Text; 


public static class WebClientEx 
{ 
    public static string UploadFileEx(string uploadfile, string url) 
    { 
     const string fileFormName = "File"; 
     const string contenttype = "application/vsix"; 

     var postdata = "?"; 
     Uri uri = new Uri(url + postdata); 


     string boundary = "----------" + DateTime.Now.Ticks.ToString("x"); 
     HttpWebRequest webrequest = (HttpWebRequest) WebRequest.Create(uri); 
     webrequest.ContentType = "multipart/form-data; boundary=" + boundary; 
     webrequest.Method = "POST"; 
     webrequest.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; 
     webrequest.ServicePoint.Expect100Continue = false; 
     webrequest.AllowAutoRedirect = false; 

     // Build up the post message header 
     StringBuilder sb = new StringBuilder(); 
     sb.Append("--"); 
     sb.Append(boundary); 
     sb.Append("\r\n"); 
     sb.Append("Content-Disposition: form-data; name=\""); 
     sb.Append(fileFormName); 
     sb.Append("\"; filename=\""); 
     sb.Append(Path.GetFileName(uploadfile)); 
     sb.Append("\""); 
     sb.Append("\r\n"); 
     sb.Append("Content-Type: "); 
     sb.Append(contenttype); 
     sb.Append("\r\n"); 
     sb.Append("\r\n"); 

     string postHeader = sb.ToString(); 
     byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader); 

     // Build the trailing boundary string as a byte array 
     // ensuring the boundary appears on a line by itself 
     byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); 

     Stream requestStream; 
     using (FileStream fileStream = new FileStream(uploadfile, FileMode.Open, FileAccess.Read)) 
     { 
      long length = postHeaderBytes.Length + fileStream.Length + 
          boundaryBytes.Length; 
      webrequest.ContentLength = length; 

      requestStream = webrequest.GetRequestStream(); 
      requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); 

      // Write out the file contents 
      byte[] buffer = new byte[checked((uint) Math.Min(4096, (int) fileStream.Length))]; 
      int bytesRead; 
      while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) 
       requestStream.Write(buffer, 0, bytesRead); 
     } 

     // Write out the trailing boundary 
     requestStream.Write(boundaryBytes, 0, boundaryBytes.Length); 

     using (HttpWebResponse response = (HttpWebResponse) webrequest.GetResponse()) 
     { 
      return string.Format("{0} {1} ({2}", (int) response.StatusCode, response.StatusDescription, response.Headers[HttpResponseHeader.Location]); 
     } 
    } 
} 
"@ 

Add-Type -TypeDefinition $source -Language CSharpVersion3 

[WebClientEx]::UploadFileEx("D:\dev\sandbox\VSIXProject2\VSIXProject2\bin\Debug\VSIXProject2.vsix", "http://mywebserver/InmetaGallery/Upload/Post") 
関連する問題