7

Gần đây tôi bắt đầu chơi xung quanh với LuaInterface để có được Lua scripting làm việc trong các chương trình C# của tôi. Để dễ dàng tạo các kịch bản Lua từ bên trong Visual Studio, tôi đã cài đặt một plugin tô sáng cú pháp Lua và tạo một Item Template để tôi có thể tạo các kịch bản mới bằng cách kích chuột phải vào tệp dự án và chọn "New Item-> Lua Script". Điều này hoạt động khá tốt.Có thể tự động đặt "Sao chép vào thư mục đầu ra" khi tạo tệp trong Visual Studio 2010 không?

Để chương trình tìm tập lệnh, chúng cần được đặt trong cùng một thư mục (hoặc thư mục con) của vị trí xây dựng. Đây chính xác là nơi tôi muốn chúng, nhưng để làm điều này, tôi phải thay đổi thiết lập "Copy to Output Directory" cho mỗi tập tin mới mà tôi tạo ra.

Có cách nào để thay đổi cài đặt mặc định của tùy chọn này không? Ngay bây giờ nó mặc định là "Không sao chép". Tôi chỉ có thể tìm thấy one other question hỏi về cơ bản cùng một điều nhưng câu trả lời duy nhất được cung cấp ở đó đã đề xuất sự kiện sau khi sao chép tất cả các tệp có cùng phần mở rộng đến một vị trí đã xác định. Tôi thực sự không muốn làm điều này vì đích đến có thể thay đổi hoặc nhiều mục tiêu hơn có thể được thêm vào (và sẽ yêu cầu sự kiện bổ sung?) Và tôi muốn có thể thay đổi cài đặt đó trên cơ sở từng tệp.

Đây chỉ là vấn đề tiện lợi vì tôi có thể thay đổi tùy chọn đó theo cách thủ công cho từng tệp, nhưng có thể tự động hóa phần còn lại của quá trình, tôi hy vọng tôi có thể tự động hóa chi tiết cuối cùng này.

Trả lời

4

Bạn sẽ có thể thêm tham chiếu IWizard vào mẫu, điều này sẽ chạy khi bạn nhấp vào ok trong tệp -> Thêm cửa sổ. Bạn sẽ cần phải add the assembly and type vào tệp vstemplate.

Triển khai RunFinished hoặc có thể là phương thức ProjectItemFinishedGenerating. Sau đó bạn có thể sử dụng đối tượng EnvDTE tiếp xúc bằng Visual Studio để thao tác bất kỳ mục nào trong các giải pháp sử dụng Visual Studio mô hình Khả năng mở rộng tiêu chuẩn ..

The following code snippit (từ T4 Toolbox mã nguồn mở) cho thấy làm thế nào để thiết lập thuộc tính này.

/// <summary> 
    /// Sets the known properties for the <see cref="ProjectItem"/> to be added to solution. 
    /// </summary> 
    /// <param name="projectItem"> 
    /// A <see cref="ProjectItem"/> that represents the generated item in the solution. 
    /// </param>   
    /// <param name="output"> 
    /// An <see cref="OutputFile"/> that holds metadata about the <see cref="ProjectItem"/> to be added to the solution. 
    /// </param> 
    private static void SetProjectItemProperties(ProjectItem projectItem, OutputFile output) 
    { 
     // Set "Build Action" property 
     if (!string.IsNullOrEmpty(output.BuildAction)) 
     { 
      ICollection<string> buildActions = GetAvailableBuildActions(projectItem);    
      if (!buildActions.Contains(output.BuildAction)) 
      { 
       throw new TransformationException(
        string.Format(CultureInfo.CurrentCulture, "Build Action {0} is not supported for {1}", output.BuildAction, projectItem.Name)); 
      } 

      SetPropertyValue(projectItem, "ItemType", output.BuildAction); 
     } 

     // Set "Copy to Output Directory" property 
     if (output.CopyToOutputDirectory != default(CopyToOutputDirectory)) 
     { 
      SetPropertyValue(projectItem, "CopyToOutputDirectory", (int)output.CopyToOutputDirectory); 
     } 

     // Set "Custom Tool" property 
     if (!string.IsNullOrEmpty(output.CustomTool)) 
     { 
      SetPropertyValue(projectItem, "CustomTool", output.CustomTool); 
     } 

     // Set "Custom Tool Namespace" property 
     if (!string.IsNullOrEmpty(output.CustomToolNamespace)) 
     { 
      SetPropertyValue(projectItem, "CustomToolNamespace", output.CustomToolNamespace); 
     }  
    } 
+0

Cảm ơn! Điều này có vẻ như nó có thể làm việc, nhưng bạn có xảy ra để có một liên kết đến một ví dụ hoặc một hướng dẫn? Tôi đang cố gắng làm theo hướng dẫn tại http://msdn.microsoft.com/en-us/library/ms185301.aspx nhưng tôi đang tìm kiếm nó một chút khó khăn để xử lý. Tôi cũng gặp khó khăn khi tìm một tùy chọn kiểm soát cài đặt 'Sao chép vào thư mục đầu ra'. Bạn đã đề cập đến đối tượng EnvDTE, vì vậy tôi nghĩ nó có trong bộ sưu tập EnvDTE.ProjectItem.Properties. Đây là lần đầu tiên tôi xem xét việc viết một phần mở rộng của trình soạn thảo, và có vẻ như tài liệu cho công cụ này hơi thưa thớt. –

+0

Mẫu mã được thêm từ dự án mã nguồn mở T4Toolbox – jessehouwing

+0

Được làm việc đẹp mắt. Mẫu mã đó đã giúp rất nhiều. Cảm ơn! –

Các vấn đề liên quan