2008-09-30 12 views
5

Chúng tôi sử dụng DesignSurface và tất cả những gì tốt đẹp IDesignerHost trong nhà thiết kế của chúng tôi. Các biểu mẫu được thiết kế sau đó được duy trì theo định dạng riêng biệt của chúng tôi và tất cả đều hoạt động tốt. Chúng tôi cũng muốn xuất các biểu mẫu sang định dạng dựa trên văn bản (mà chúng tôi đã thực hiện vì không khó như vậy).Có cách nào để chuyển mã nguồn trở lại thành CodeCompileUnit không?

Tuy nhiên, chúng tôi cũng muốn nhập văn bản đó trở lại vào tài liệu cho nhà thiết kế có liên quan đến việc nhận mã thiết kế trở lại vào CodeCompileUnit. Thật không may, các phương pháp Parse không được thực hiện (cho, không có nghi ngờ, lý do tốt). Có cách nào khác không? Chúng tôi không muốn sử dụng bất cứ thứ gì không tồn tại trên bản cài đặt .NET chuẩn (như các thư viện .NET được cài đặt với Visual Studio). Ý tưởng hiện tại của tôi là biên dịch văn bản đã nhập và sau đó khởi tạo biểu mẫu và sao chép các thuộc tính và điều khiển của nó sang đối tượng bề mặt thiết kế, và chỉ chụp CodeCompileUnit mới, nhưng tôi đã hy vọng có một cách tốt hơn. Cảm ơn.


CẬP NHẬT: Mặc dù một số người có thể quan tâm đến tiến trình của chúng tôi. Cho đến nay, tình hình chưa tốt lắm. Tổng quan ngắn gọn về những gì tôi đã phát hiện là phương thức Parse không được triển khai vì nó được coi là quá khó, các trình phân tích cú pháp nguồn mở tồn tại, nhưng chúng không hoàn chỉnh và do đó không được bảo đảm làm việc trong mọi trường hợp (NRefactory là một trong những dự án từ dự án SharpDevelop, tôi tin), và việc sao chép các điều khiển từ một cá thể cho nhà thiết kế vẫn chưa hoạt động. Tôi tin rằng điều này là bởi vì mặc dù các điều khiển được thêm vào thể hiện mẫu mà bề mặt thiết kế kết thúc tốt đẹp, bề mặt thiết kế không nhận thức được sự bao gồm của chúng. Nỗ lực tiếp theo của chúng tôi là bắt chước cắt/dán để xem nếu nó giải quyết nó. Rõ ràng, đây là một cách giải quyết khó chịu rất lớn, nhưng chúng tôi cần nó làm việc vì vậy chúng tôi sẽ lấy hit và giữ một mắt ra cho lựa chọn thay thế.

+0

Tôi cũng muốn biết câu trả lời, nhưng nỗi sợ của tôi là không có câu trả lời. – ZeroBugBounce

+0

Tôi thực sự đang tìm kiếm một giải pháp cho điều này. Tôi muốn kết hợp các hàm mới với mã hiện tại một cách dễ dàng, tốt hơn là thông qua phân tích cú pháp một tệp mã, sau đó thêm thành viên mới sau đó tôi sẽ tạo tập lệnh từ CodeCompileUnit đã hợp nhất. – Statement

Trả lời

2

Bạn luôn có thể viết trình phân tích cú pháp C# của riêng mình. Bằng cách đó bạn có thể chắc chắn về sự hoàn chỉnh của nó.

Trong trường hợp của bạn, bởi vì bạn không cần bất cứ thứ gì như intelliSense, bạn có thể có thể lấy đi chỉ bằng cách sử dụng trình tạo trình phân tích cú pháp.

Thậm chí nếu bạn đã viết bằng tay, tuy nhiên, có thể bạn sẽ không mất nhiều hơn một tháng.

+0

Tôi đã hy vọng tránh phải thực hiện nỗ lực này. Vấn đề là thời gian - tính năng này, mặc dù được yêu cầu, không đủ quan trọng để đảm bảo đầu tư thời gian để viết một trình phân tích ngôn ngữ. Tôi vẫn đang xem xét nó. –

+0

Nói chung, VS CodeDom là khá không đầy đủ. Nó đã không theo kịp với những thay đổi ngôn ngữ từ V7. Tôi nghĩ, vì lợi ích của sản phẩm của bạn, bạn có thể nên viết trình phân tích cú pháp của riêng bạn. Đó là cách duy nhất bạn sẽ chắc chắn rằng bạn có thể trả lời những thay đổi ngôn ngữ trong tương lai. –

2

Nó không chính xác những gì bạn yêu cầu, nhưng bạn có thể thử sử dụng lớp CodeDomComponentSerializationService để tạo biểu đồ CodeDom dựa trên trạng thái hiện tại của bề mặt thiết kế.

Chúng tôi sử dụng lớp đó để xử lý chức năng sao chép/dán trong trình thiết kế tích hợp của chúng tôi.

+0

Vâng, chúng tôi đã làm điều này để lấy nguồn ra khỏi bề mặt, nhưng chúng tôi muốn đưa nguồn trở lại bề mặt, gây ra vấn đề. –