Tôi đang viết một IDE phát triển trò chơi để tạo và biên dịch các dự án .NET (mà tôi đã làm việc trong vài năm qua) và đang trong quá trình cập nhật nó để tạo đầu ra không chỉ cho Windows/Visual Studio, mà còn cho Linux/MonoDevelop (một quá trình rất đơn giản cho .NET, nhưng vẫn yêu cầu một số chỉnh sửa).Ai sao chép app.config vào app.exe.config?
Là một phần của điều này, tôi thấy cần thiết để bắt đầu tạo tệp app.config như một phần của điều này để ánh xạ các tên DLL phụ thuộc vào tên phụ thuộc Linux với các phần tử <dllmap>. Tôi đang bối rối về những người chịu trách nhiệm sao chép tệp app.config vào tên output.exe.config. Trong một dự án Visual Studio, Build Action cho app.config dường như thường được thiết lập là "None" và các thiết lập của nó chỉ ra rằng nó sẽ không được sao chép bất cứ đâu, nhưng khi Visual Studio biên dịch dự án nó tạo app.exe.config (mặc dù đôi khi tôi thấy điều này không đáng tin cậy). Khi tôi sử dụng MSBuild để xây dựng một tệp giải pháp được tạo ra bởi IDE (cho mục đích gỡ lỗi), MSBuild sao chép app.config thành app.exe.config. Nhưng khi tôi biên dịch dự án với CSharpCodeProvider.CompileAssemblyFromFile nó (tự nhiên) không thích tệp cấu hình được bao gồm dưới dạng mã nguồn ("app.config (1,1): lỗi CS0116: Không gian tên không trực tiếp chứa các thành viên như trường hoặc phương thức "), và tất nhiên nó không sao chép nó vào đầu ra khi tôi không đưa nó vào làm đầu vào. Có trách nhiệm của tôi để chỉ cần sao chép app.config để app.exe.config độc lập, hoặc là có một cách tiêu chuẩn hơn để làm điều này?
Có khó khăn khi lấy tệp * .config đầu tiên không? Trong IDE của tôi, có thể hiểu rằng tệp app.config sẽ được đổi tên hoặc tệp khác được thêm (giống như trong Visual Studio). Nó có vẻ kỳ lạ với tôi rằng IDE có hành động bí mật này để cấu hình các tập tin (tôi nghĩ MonoDevelop hoạt động tương tự như vậy trong vấn đề này bởi vì tôi không thể tìm thấy một hành động đặc biệt cho các tập tin cấu hình có một trong hai). Tôi không biết làm thế nào nó thậm chí còn chọn những tập tin mà hành động bí mật này áp dụng.
Để làm rõ, câu hỏi của tôi là, kể từ khi tôi đang sử dụng CSharpCodeProvider để biên dịch mã (mà không cần đến một lệnh shell như MSBuild để lập dự án), cách chính xác để có được app.exe là gì .config trong đầu ra? – BlueMonkMN
Tôi khuyên bạn nên sử dụng MSBuild trong IDE của bạn và tạo các tác vụ MSBuild cho bất kỳ đầu ra xây dựng đặc biệt nào mà bạn tạo ra, mà MSBuild không hỗ trợ. Điều này sẽ cho phép MSBuild biên dịch các giải pháp của bạn. Ngoài ra điều này sẽ làm cho sản phẩm của bạn dễ dàng hơn để tích hợp với tích hợp liên tục như TeamCity. – grover
MSBuild có thể đã biên dịch các giải pháp của tôi. Và khi đó, nó đã được xử lý app.config một cách chính xác. CSharpCodeProvider có vẻ như là một giải pháp trực tiếp hơn với ít chi phí hơn là bắn phá MSBuild. IDE tạo ra một tệp giải pháp, nhưng không sử dụng nó khi biên dịch nội bộ. – BlueMonkMN