7

Tôi có một dự án tạo văn bản (đại diện cho một giao diện và một lớp) dựa trên siêu dữ liệu. Tôi muốn lấy mã được tạo ra này và chèn nó như là một lớp và giao diện mới trực tiếp vào giải pháp hiện đang mở trong một dự án và thư mục cụ thể. Tôi sẽ tạo ra các công cụ trình đơn sẽ tạo ra các lớp học nhưng những gì tôi không biết làm thế nào để làm là đạt được quyền truy cập vào các mục sau từ trong Visual Studio mở rộng tùy chỉnh của tôi:Tạo mã từ một phần mở rộng Visual Studio

  1. Lặp lại giải pháp hiện tại và tìm một dự án để đưa mã được tạo vào.
  2. Mở cửa sổ tệp mới trong Visual Studio và chèn văn bản được tạo từ công cụ của tôi trực tiếp vào cửa sổ đó.
  3. Tạo thư mục mới trong một dự án cụ thể trong giải pháp hiện tại từ trong tiện ích mở rộng tùy chỉnh của tôi.

EDIT - Để làm rõ tôi cần phải mở một tập tin mới (ví dụ Right Click vào một dự án -> Add -> New Class) và chèn văn bản vào nó từ bên trong tùy chỉnh của tôi Visual Studio Extension.

Cảm ơn

+1

Bạn đã xem là sử dụng các mẫu T4 thay vì một phần mở rộng? Bạn có thể tạo dữ liệu meta của bạn dưới dạng XML trong tệp .config và chạy mẫu T4 để tạo mỗi lớp/giao diện. Nó chỉ hoạt động trên một bản đồ meta-tạo ra 1-1 mặc dù. – DaveShaw

+0

Có, tôi đang sử dụng các mẫu T4 để tạo mã ngay bây giờ, nhưng các lớp này được tạo từ siêu dữ liệu trong cơ sở dữ liệu vì vậy tôi không muốn chúng tồn tại bên trong một dự án, tôi muốn cho phép người dùng nói loại lớp nào họ muốn và sau đó tôi tạo mã (sử dụng T4) và trả về một lớp và một giao diện dưới dạng văn bản, để lại cho tôi các câu hỏi ở trên. –

+0

Có ý nghĩa khi đặt mẫu T4 vào cùng một nơi mà bạn sẽ sử dụng mã được tạo. – StingyJack

Trả lời

10

Đối với việc tạo ra một tập tin mới từ một Visual Studio Extension (ToolWindowPane) đầu tiên sử dụng phương pháp GetService:

// Get an instance of the currently running Visual Studio IDE 
DTE dte = (DTE)GetService(typeof(DTE)); 

Thứ hai, đảm bảo rằng một giải pháp hiện đang mở, nếu không có giải pháp mở cửa thế hệ tập tin sẽ không làm việc:

string solutionDir = System.IO.Path.GetDirectoryName(dte.Solution.FullName); 

thứ ba, tạo ra các tập tin mới từ đối tượng DTE:

0.123.
dte.ItemOperations.NewFile(@"General\Visual C# Class", "ObjectOne", EnvDTE.Constants.vsViewKindTextView); 

Sau khi tạo tập tin mới sử dụng đoạn mã sau để truy cập vào nội dung của tập tin đó và thay thế bằng văn bản được tạo ra của bạn:

TextSelection txtSel = (TextSelection)dte.ActiveDocument.Selection; 
TextDocument txtDoc = (TextDocument)dte.ActiveDocument.Object(""); 

txtSel.SelectAll(); 
txtSel.Delete(); 
txtSel.Insert("Hello World"); 
+0

Làm thế nào để lưu tệp đã tạo mà không nhắc lưu hộp thoại (lưu ẩn) và thêm vào giải pháp dưới dạng mục? – Gayan

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