Tôi muốn một số mã biên dịch mã trong TextBox của tôi (ví dụ). Những gì tôi có nghĩa là tôi muốn biên dịch mã sau khi chạy chương trình. Tôi có thể làm cái này như thế nào?Biên dịch mã C# trong ứng dụng
Trả lời
Xem bài viết này:
http://support.microsoft.com/kb/304655
Dưới đây là đoạn code mẫu mà họ cung cấp:
var codeProvider = new CSharpCodeProvider();
ICodeCompiler icc = codeProvider.CreateCompiler();
var parameters = new CompilerParameters()
{
GenerateExecutable = true,
OutputAssembly = Output,
};
CompilerResults results = icc.CompileAssemblyFromSource(parameters, sourceString);
if (results.Errors.Count > 0)
{
foreach(CompilerError error in results.Errors)
{
textBox2.Text = textBox2.Text
+ "Line number " + error.Line
+ ", Error Number: " + error.ErrorNumber
+ ", '" + error.ErrorText + ";"
+ Environment.NewLine + Environment.NewLine
;
}
}
Như Aliostad đã đề cập trong câu trả lời của mình, hãy cẩn thận với giải pháp này, mặc dù. Bạn sẽ cần đảm bảo mã được biên dịch của bạn kết thúc bằng số AppDomain
riêng của mình, nếu không bạn sẽ bị rò rỉ bộ nhớ.
Xem câu hỏi liên quan này về cách nạp mã vào một riêng biệt AppDomain
:
How can I prevent CompileAssemblyFromSource from leaking memory?
Chỉ cần cẩn thận, mọi mã được biên dịch và tải, không thể tải xuống. Điều này có thể gây ra rò rỉ bộ nhớ , tức là nếu ai đó tiếp tục nhập và thay đổi mã và biên dịch nó, các hội đồng sẽ được tải và cuối cùng bạn sẽ hết bộ nhớ.
Một giải pháp là tạo thứ hai AppDomain và tải lắp ráp trong đó và khi không cần, hãy dỡ bỏ AppDomain.
Bạn không thấy nhận xét của mình? – Aliostad
+1 cho AppDomain thứ hai –
- 1. Biên dịch mã OpenMP thành mã C
- 2. Trình biên dịch biên dịch trong C#
- 3. getopt.h: Biên dịch mã C-C trong Windows
- 4. Trình biên dịch/trình biên dịch/trình biên dịch C++
- 5. Biên dịch openmp thành pthreads Mã C
- 6. Biên dịch mã động bằng C#
- 7. Tại sao mã C này biên dịch?
- 8. Biên dịch mã .NET trong .NET 4?
- 9. Làm thế nào để chạy ứng dụng C# bên trong một trình biên dịch mã khác với chạy một trình biên dịch mã bên ngoài?
- 10. Ở mức độ nào trình biên dịch C# hoặc JIT tối ưu hóa mã ứng dụng?
- 11. Hiệu suất biên dịch mã bằng biên dịch biên dịch
- 12. Lỗi biên dịch cmath khi biên dịch mã C++ cũ trong VS2010
- 13. Làm cách nào để biên dịch và liên kết mã C++ với mã C đã biên dịch?
- 14. Biên dịch mã C từ Command Prompt trong Windows?
- 15. Trình biên dịch ngược C/C++ mã nguồn mở
- 16. Mã C# không được biên dịch có biên dịch thành IL và chạy trên CLR không?
- 17. Biên dịch mã động khi chạy bằng T4 và C#
- 18. Biên dịch C# thành Gốc?
- 19. Thông tin an toàn chứa trong mã biên dịch ứng dụng iPhone như thế nào?
- 20. Xem mã mở rộng của trình biên dịch - C++
- 21. Lỗi trình biên dịch C++ trong xamltypeinfo.g.cpp
- 22. Tại sao mã Haskell này biên dịch?
- 23. Biên dịch sang mã giả
- 24. Biên dịch và chạy một ứng dụng OSGI trong Eclipse
- 25. ClassNotFoundException trong thời gian chạy nhưng ứng dụng biên dịch
- 26. Không thể biên dịch mã C/C++ đang sử dụng ncurses
- 27. Biên dịch mã C++ cho AIX trên Ubuntu?
- 28. Biên dịch C++ với Cygwin
- 29. Tải động các plugin trăn chưa được biên dịch trong mã biên dịch py2exe
- 30. Biên dịch mã Ruby Inline C - giải quyết lỗi
Tôi không nghĩ rằng nó có thể dễ dàng như vậy ... wow !!! 1 cho câu trả lời của bạn – Marco
BTW mẫu mã này chỉ được chỉnh sửa tối thiểu. Tôi cá nhân sử dụng một 'StringBuilder' trên vòng lặp thông báo lỗi đó và ghi đè lên văn bản của hộp văn bản thay vì gắn thêm vào nó. –