100

Tôi vừa nâng cấp lên Visual Studio 2010 và MVC 2.0 và tôi nhận thấy Web.config có thêm hai tệp đính kèm vào nó? Những tệp này có được sử dụng để chỉ định gỡ lỗi và phát hành các cài đặt cụ thể, vì vậy bạn không làm lộn xộn lên Web.config chính không?Tệp Web.Debug.config và Web.Release.Config là gì?

Thậm chí nó có ý nghĩa khi đặt một chuỗi kết nối trong tệp Web.config gốc nếu tôi có một địa phương và từ xa trong gỡ lỗi và phát hành Web.configs tương ứng?

Cảm ơn!

Trả lời

90

Đây là tính năng chuyển đổi Web.config mới của Visual Studio 2010. More information here.


Edit:

Are these files used to specify debug and release specific settings, so you don't clutter up the main web.config?

Nó không phải là giới hạn trong ba tác phẩm, bạn có thể (về mặt lý thuyết) có nhiều file như bạn có môi trường. Web.config "cấp cao nhất" cung cấp mẫu của cấu hình web của bạn. Các tập tin dưới nó cung cấp các giá trị thay thế cụ thể cho môi trường đó (như nếu bạn có các chuỗi kết nối khác nhau cho local/stage/test/bất cứ điều gì).

Does it even make sense to place a connection string in the root web.config file if I have have a local and remote one in the debug and release web.configs respectively.

Sẽ chỉ có ý nghĩa nếu nó không thay đổi giữa các môi trường. Âm thanh như trong trường hợp của bạn nó như vậy, trong trường hợp của bạn không, nó sẽ không có ý nghĩa để lại nó trong Web.config.

+9

Tính năng này được nướng một nửa, thậm chí 4 năm sau! Nó chỉ hoạt động khi triển khai tới các gói xuất bản/xanh. Dưới đây là một chủ đề thú vị: http://forums.asp.net/t/1532038.aspx – theoutlander

-3

Đó là điều cần thiết trong VS. Thật không may có vẻ là một vấn đề với việc thực hiện. Ví dụ xem xét kịch bản này (VS.2010 Ultimate, tất cả SP):

Web.Config

  • Không connectionStrings phần
  • thành viên hoàn toàn tài khoản/Vai trò/etc. cấu hình nhà cung cấp sử dụng connectionStringName = "test"

Web.Release.Config

  • Không cấu hình thành viên (đã được quy định trong web.config chính) phần
  • connectionStrings bao gồm CS tên là "test"

Web.Debug.Config

  • Không cấu hình thành viên (đã được quy định trong web.config chính) phần
  • connectionStrings bao gồm CS tên là "test"

Khi thực hiện việc áp dụng cho các lỗi sau:

The connection name 'test' was not found in the applications configuration or the connection string is empty.

Nói cách khác , vì các phần tử chuỗi kết nối nằm trong các tệp thiết kế Bản phát hành/Gỡ lỗi và được sử dụng bởi các phần tử cấu hình trong tệp chính (Web.config), nên không thể giải quyết được.

+5

Để công bằng, nếu bạn có chuỗi kết nối có tên 'test' trong cả tệp gỡ lỗi và bản phát hành của bạn, nó thực sự chỉ nên ở trong web.config chính với các phần thích hợp được tạo khuôn mẫu. Như là, bạn đang sao chép mã, đó là một cái gì đó mẫu được cho là giải quyết cho bạn. – R0MANARMY

+3

-1: Bài đăng rất cũ này là một giải thích sai về cách sử dụng các biến đổi cấu hình web. ** 1 ** Nó không thực sự là một câu trả lời (chỉ là một khiếu nại không chính xác) và ** 2 ** nó không phải là một sự kết hợp đơn giản của các yếu tố như ngụ ý ở đây. Bạn phải có các lệnh 'xslt' thay thế rõ ràng. * Được thực hiện tốt khi nhận được 5 upvotes cho một cái gì đó mà thêm vào sự nhầm lẫn về những tập tin chuyển đổi * :) –

9

Đây là Web.tập tin chuyển đổi cấu hình. Từ ASP.NET Web Deployment using Visual Studio: Web.config File Transformations:

There are two ways to automate the process of changing Web.config file settings: Web.config transformations and Web Deploy parameters. A Web.config transformation file contains XML markup that specifies how to change the Web.config file when it is deployed. You can specify different changes for specific build configurations and for specific publish profiles. The default build configurations are Debug and Release, and you can create custom build configurations. A publish profile typically corresponds to a destination environment.

1

Trong trường hợp ai đó quan tâm, đây là điều tôi đã viết để có chuỗi kết nối động trên môi trường. Tôi muốn triển khai mã cho bất kỳ môi trường nào (Dev, Test, Pre-Prod, Prod ...) mà không phải lo lắng về việc thay đổi các chuỗi kết nối. Tôi không thể thực sự tìm thấy một cách tốt để làm điều này với Asp.Net MVC 4, vì vậy tôi đã đưa ra cách riêng của tôi để dựa vào một tập tin thuộc tính cho mỗi môi trường.

Có thể có giải pháp tốt hơn, tôi đến từ nền Wicket/Java và gần đây đã bắt đầu phát triển với MVC 4 nên có thể có giải pháp tốt hơn. Nhưng đây là liên kết đến câu hỏi và câu trả lời của tôi cho chuỗi kết nối động:

Asp.net MVC 4 dynamic connection string