14

Có công cụ nào hay tiện ích mở rộng Visual Studio 2010 cho phép tôi xem đầu ra của quá trình chuyển đổi tệp cấu hình không cần phải xuất bản toàn bộ dự án? Có phải quá trình thực hiện phép chuyển đổi trực tiếp không thể thực hiện được không?Công cụ để xem trước các chuyển đổi tập tin cấu hình


Sửa

Sau hơn một chút Googling Tôi đã xem qua this:

Bước 4: Tạo một file web.config chuyển mới cho “Staging” môi trường từ dòng lệnh

Mở Visual Studio Cửa sổ nhắc lệnh bằng cách cách vào Start -> Program Files -> Visual Studio v10.0 -> Visual Studio công cụ -> Visual Studio 10.0 lệnh Prompt

Loại “MSBuild“Đường dẫn đến dự án ứng dụng nộp (csproj/.vbproj)” /t: TransformWebConfig /p: Cấu hình = Staging" và nhấn nhập như hình dưới đây:

commandline web.config transformation

khi việc chuyển đổi thành công web.config cho “Staging” cấu hình sẽ được lưu trữ dưới obj -> Staging thư mục dưới gốc dự án của bạn (Trong giải pháp Explorer, bạn có thể truy cập thư mục này bằng cách các tập tin ẩn bỏ trốn đầu tiên):

transformed web.config

  • trong cửa sổ solution explorer nhấp vào nút để hiển thị các tập tin ẩn
  • mở thư mục obj
  • Navigate to cấu hình Active (trong cu của chúng tôi trường hợp rrent nó là “Staging”)
  • Bạn có thể tìm web.config chuyển có

Bây giờ bạn có thể xác minh rằng mới dàn dựng file web.config tạo có các thay đổi phần chuỗi kết nối.

Nguồn: Web Deployment: Web.Config Transformation

Đây không phải là thực sự là một giải pháp hoàn hảo đối với tôi vì nó vẫn đòi hỏi việc xây dựng toàn bộ bởi dự án ít nhất là với lệnh ông đăng. Nếu bất cứ ai biết cách bỏ qua bước xây dựng với lệnh MSBuild sẽ hữu ích (mặc dù điều đó có vẻ hơi khó xảy ra).

Sửa 2

Tôi cũng thấy Config Transformation Tool này trên CodePlex, trong đó cung cấp một số chức năng tốt đẹp để mở rộng quá trình chuyển đổi. Đây là công cụ là điều gần nhất tôi đã thấy cho các chức năng tôi đang tìm kiếm và sẽ là một điểm khởi đầu tuyệt vời cho việc phát triển một phần mở rộng mà tạo ra xem trước. Nó sử dụng thư viện Microsoft.Web.Publishing.Tasks để thực hiện phép chuyển đổi và không phụ thuộc vào việc xây dựng một dự án thực tế.

Trả lời

7

Bạn có thể chuyển đổi tệp cấu hình bằng cách sử dụng cùng một đối tượng tác vụ MSBuild sử dụng, bỏ qua hoàn toàn MSBuild. Logic chuyển đổi cấu hình Web được chứa trong thư viện Microsoft.Web.Publishing.Tasks.

Đoạn mã sau đến từ thư viện lớp đơn giản, tham khảo thư viện Microsoft.Web.Publishing.Tasks (được cài đặt trên máy của tôi tại C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10. 0 \ Web).

Mẫu tải tài liệu nguồn và chuyển đổi, áp dụng phép biến đổi và ghi kết quả vào tệp mới.

using System; 
using Microsoft.Web.Publishing.Tasks; 

// ... 

var xmlTarget = new XmlTransformableDocument(); 
xmlTarget.PreserveWhitespace = true; 
xmlTarget.Load("Web.config"); 

var xmlTransform = new XmlTransformation("Web.Release.config"); 

if (xmlTransform.Apply(xmlTarget)) 
    xmlTarget.Save("Web.Transformed.config"); 
else 
    Console.WriteLine("Unable to apply transform."); 

Với một chút sáng tạo, giải pháp đơn giản này có thể được tích hợp vào plugin Visual Studio, có thể là một mục menu ngữ cảnh trên tệp web.config. Ít nhất, bạn có thể tạo tiện ích bảng điều khiển hoặc tập lệnh ra khỏi nó để tạo bản xem trước.

Chúc may mắn!

+0

này về cơ bản là một mở rộng của tôi "Chỉnh sửa 2" đoạn văn. Tôi cảm thấy như có ít nhất một số nhu cầu cho một công cụ như thế này và tôi bắt đầu để đặt các mảnh với nhau bản thân mình. Với bất kỳ may mắn nào, tôi hy vọng sẽ phát hành một thứ gì đó trên Thư viện mở rộng trong tương lai gần.Cảm ơn bạn đã nhập! –

+0

@Nathan: Chúc bạn may mắn với tiện ích mở rộng. Tôi mong muốn được nhìn thấy nó. Công cụ CodePlex hoạt động bằng cách gọi MSBuild. Đối với một công cụ tùy chỉnh, bạn có thể muốn sử dụng thư viện trực tiếp như được hiển thị. Hãy ủng hộ tôi và thêm nhận xét khi bạn hoàn tất. Chúc may mắn! – kbrimington

+0

Tôi cũng nghĩ ban đầu nó hoạt động bằng cách gọi MSBuild, nhưng sau khi duyệt nguồn, tôi nhận ra anh ta đang sử dụng các thư viện mà bạn đã đề cập ở trên. Từ vẻ ngoài của nó, nó không phải là khó khăn ở tất cả để xây dựng một nguyên mẫu chức năng của phần mở rộng. –

12

Các SlowCheetah VS add-in trên visualstudiogallery cho phép bạn xem trước kết quả chuyển đổi

+1

Vâng SlowCheetah làm cho điều này thành một nhấp chuột phải vì vậy nó hoàn hảo cho điều này –

+0

Sau khi chiến đấu với một biến đổi cho nửa giờ nghĩ tôi muốn google cho công cụ chuyển đổi, đến đây, cài đặt nó và nó cho thấy vấn đề của tôi ngay lập tức. Đã sửa trong 2 phút. Thêm vào "của tôi phải có, làm thế nào tôi quản lý mà không có nó trước khi?" bộ công cụ. –

2

Cũ bưu điện, nhưng nghĩ tôi sẽ chia sẻ những gì tôi đã tìm thấy với một google nhanh chóng (đối với những người có thể không tìm thấy nó hay cố gắng ở đây đầu tiên):

Web.config Transformation Tester - By AppHarbor
Đơn giản chỉ cần dán XML gốc của bạn cùng với XML chuyển đổi và xem kết quả ngay lập tức.

Ngoài ra, nó là open source cho bất kỳ ai quan tâm.

0

Chỉ để mở rộng điều này một chút. Tôi cần chính xác những gì được thảo luận ở trên. Chỉ có thể chạy biến đổi. Sau đó, móc vào quá trình xây dựng của tôi mà xảy ra là TeamCity trong trường hợp của tôi.

Bạn sẽ cần sử dụng Microsoft.Web.Publishing.Tasks, mà bạn chỉ có thể đập xuống bằng Nuget. Vâng, tôi đã ở VS2013 nên tôi có thể. Tôi chắc rằng bạn có thể có được dll nếu không.

Đã viết một ứng dụng Console đơn giản. Bạn có thể thấy nó hữu ích.

Program.cs

using System; 

namespace WebConfigTransform 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      if (args.Length != 3) 
      { 
       Console.WriteLine("Config Gen ... usage -source -transform -destination"); 
       Environment.Exit(-1); 
      } 

      Transform t = new Transform(args[0], args[1], args[2]); 
      t.Run(); 
     } 
    } 
} 

Transform.cs

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Security; 
using System.Security.Permissions; 
using Microsoft.Web.XmlTransform; 

namespace WebConfigTransform 
{ 
    class Transform 
    { 
     private readonly string m_source; 
     private readonly string m_transform; 
     private readonly string m_destination; 

     public Transform(string source, string transform, string destination) 
     { 
      m_source = source; 
      m_transform = transform; 
      m_destination = destination; 
     } 

     private void TransformFiles() 
     { 
      var xmlTarget = new XmlTransformableDocument(); 
      xmlTarget.PreserveWhitespace = true; 
      xmlTarget.Load(m_source); 
      var xmlTransform = new XmlTransformation(m_transform); 

      if (xmlTransform.Apply(xmlTarget)) 
       xmlTarget.Save(m_destination); 
      else 
      { 
       Console.WriteLine("Unable to apply transform."); 
       Environment.Exit(-1); 
      } 
     } 

     private void CheckPermissions() 
     { 
      string directoryName = m_destination; 
      PermissionSet permissionSet = new PermissionSet(PermissionState.None); 
      FileIOPermission writePermission = new FileIOPermission(FileIOPermissionAccess.Write, directoryName); 
      permissionSet.AddPermission(writePermission); 
      if (!(permissionSet.IsSubsetOf(AppDomain.CurrentDomain.PermissionSet))) 
      { 
       Console.WriteLine("Cannot write to file : " + m_destination); 
       Environment.Exit(-1); 
      } 
     } 

     private void CheckFileExistance() 
     { 
      List<string> ls = new List<string>(); 
      ls.Add(m_source); 
      ls.Add(m_transform); 
      foreach (string item in ls) 
      { 
       if (!File.Exists(item)) 
       { 
        Console.WriteLine("Cannot locate file : " + item); 
        Environment.Exit(-1); 
       } 
      } 
     } 

     public void Run() 
     { 
      CheckFileExistance(); 
      CheckPermissions(); 
      TransformFiles(); 
     } 
    } 
} 
Các vấn đề liên quan