2010-04-14 15 views
8

Tôi đang rối tung xung quanh với MVC 2.0 trên VS2010 và đang gặp sự cố khi tải tính năng cấu hình web sạch.VS2010 Sạch Web.configs - không cập nhật

Về cơ bản trong tôi Web.debug.config Tôi có

<connectionStrings xdt:Transform="Replace"> 
    <add name="ApplicationServices" 
    connectionString="Server=localhost;Database=SITE_DB;User ID=dbuser;[email protected];Trusted_Connection=False;" /> 
</connectionStrings> 

and in my `Web.config` I have 

     <connectionStrings> 
     <add name="ApplicationServices" 
      connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" 
      providerName="System.Data.SqlClient" /> 
     </connectionStrings> 

Khi tôi chạy các trang web trong chế độ gỡ lỗi, tôi mong đợi xdt rằng: Biến đổi = "Thay thế" sẽ thay thế toàn bộ phần connectionStrings với những gì nằm trong trang web .debug.config.

Tôi có giả định sai không? Hay tôi đang làm điều gì khác không chính xác. Không có nhiều thông tin được đăng xung quanh vấn đề này và tôi nghĩ rằng tôi sẽ hỏi các bạn.

Trả lời

0

tôi nghĩ rằng bạn cần phải đặt xdt: Locator = "trận đấu (tên)" trong

<connectionStrings xdt:Transform="Replace" xdt:Locator="Match(name)"> 
    <add name="ApplicationServices" 
     connectionString="Server=localhost;Database=SITE_DB; 
     User ID=dbuser;[email protected];Trusted_Connection=False;" 
    /> 
</connectionStrings> 
+0

điều gì xảy ra nếu anh ấy muốn thay thế mọi thứ trong phần tử connectionStrings? ngay bây giờ, trận đấu (tên) sẽ không hoạt động, phải không? bởi vì nó đang cố gắng tìm kiếm một _attribute_ trên connectionStrings _element_ được gọi là 'name' .. không tồn tại. attrib đó tồn tại trong các yếu tố _child_ .. ??? (chỉ cần suy nghĩ thật to, ở đây ...) –

+0

Pure.Krome là chính xác. Bạn cần phải loại bỏ các biến đổi Locator hoặc di chuyển cả hai biến đổi để thêm XNode thay vì connectionStrings XNode. –

11

Các .config biến chỉ xảy ra khi bạn xuất bản hoặc triển khai các ứng dụng một cách nào đó. Nếu bạn chỉ đang gỡ lỗi, các biến đổi sẽ không xảy ra.

này nghe có vẻ điên rồ, nhưng đó là trực tiếp từ miệng của một đại diện MS: http://forums.asp.net/p/1532038/3711423.aspx

+1

Hành vi điên rồ này khiến tôi mất khá nhiều thời gian ngay hôm nay: (Cảm ơn bạn đã chỉ ra lời giải thích! – Daan

+1

Điểm nào trong việc có một Web.Debug.config nếu nó không bao giờ được sử dụng sau đó? Nó chỉ có để gây nhầm lẫn cho mọi người? –

1

Bạn có thể bật hành vi này, nhưng bạn sẽ cần phải thực hiện một "mẫu" tập tin để lưu trữ của bạn trước khi chuyển đổi trạng thái trong một tệp không được đặt tên là Web.config, nếu không bạn sẽ chỉ ghi đè mẫu của mình bằng các thay đổi được chuyển đổi của bạn. Bạn cũng cần phải thêm một nhiệm vụ biến đổi vào tệp dự án của bạn để nó thực thi khi bạn gỡ lỗi.

<PropertyGroup> 
    <BuildDependsOn> 
     CustomWebConfigTransform; 
     $(BuildDependsOn); 
    </BuildDependsOn> 
</PropertyGroup> 
<Target Name="CustomWebConfigTransform"> 
    <TransformXml source="Web.template.config" 
     transform="Web.$(Configuration).config" 
     destination="Web.config" /> 
</Target> 

Ví dụ trên giả sử bạn có tệp web.config mẫu có tên Web.template.config và sẽ áp dụng chuyển đổi của bạn và tạo tệp Web.config khi bạn chạy dự án.

Tham chiếu: http://www.kongsli.net/nblog/2012/01/13/enabling-web-transforms-when-debugging-asp-net-apps/

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