2010-07-22 52 views

Trả lời

88

Đây là lỗi đã biết. Tính năng đó có thể được sử dụng ngay bây giờ chỉ như một phần của quá trình triển khai.

https://connect.microsoft.com/VisualStudio/feedback/details/523221/have-web-debug-config-apply-during-development

Hãy upvote nó, nếu bạn gặp này quá, vì vậy đây sẽ được sửa chữa càng sớm càng tốt.

+16

Để ghi lại đây không phải là lỗi, theo thiết kế của nó. Các tệp này dành cho gói/xuất bản. Nhưng điều đó không nên ngăn cản bất kỳ ai bỏ phiếu cho mục đó. –

+0

@Sayed Tôi đồng ý với bạn :) – stacker

+20

Vâng với tôi đó là một lỗi, nếu không mục đích của một Debug/phát hành biến đổi trên một máy chủ địa phương là gì? Đôi khi thiết kế có sai sót, điều đó không có nghĩa là đúng :) –

34

Điều này thực sự khá đơn giản để làm và, tin hay không, có vẻ như đây là cách VS được thiết kế để hoạt động.

Thêm các dòng sau đúng nguyên văn trước thẻ đóng "Dự án" của tệp .csproj của dự án có chứa web.config.

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" /> 
<Target Name="Transform"> 
    <MakeDir Directories="obj\$(Configuration)" Condition="!Exists('obj\$(Configuration)')" /> 
    <TransformXml Source="Web.Config" Transform="Web.$(Configuration).config" Destination="obj\$(Configuration)\Web.config" StackTrace="true" /> 
</Target> 

Đặt các dòng sau đây nguyên văn cho sự kiện sau xây dựng trong thuộc tính dự án của dự án có chứa tệp web.config. Làm điều này cho mỗi cấu hình xây dựng bạn muốn các biến đổi để chạy cho.

"$(MSBUILDBINPATH)\msbuild" "$(ProjectPath)" /t:Transform /p:Configuration=$(ConfigurationName);Platform=AnyCPU 
xcopy "$(ProjectDir)obj\$(ConfigurationName)\Web.Config" "$(ProjectDir)". /F /R /Y 
+1

Tôi sẽ chỉ khuyên bạn nên thêm dấu ngoặc kép xung quanh $ (ProjectDir) và $ (ProjectPath) để tránh lỗi trong trường hợp đường dẫn dự án của bạn chứa dấu cách. –

+1

Tốt hơn nên sử dụng , như được đề xuất trong http://stackoverflow.com/a/10506476/52277 –

+0

Tôi có thể nhận được các biến đổi để hoạt động bằng cách tiếp cận này nhưng tôi không thể nhấn điểm ngắt của tôi. Tôi đã gỡ lỗi thiết lập để đúng nhưng tôi không bao giờ nhấn breakpoint và tôi nhận được thông báo sau "Breakpoint sẽ không được hit. Không có biểu tượng đã được nạp cho tài liệu này."Điều này chỉ xảy ra đối với cấu hình tùy chỉnh của tôi và hoạt động tốt nếu tôi đặt cấu hình của mình thành "Gỡ lỗi". Bất kỳ ý tưởng? –

0

Tôi biết điều này là cũ, nhưng tôi đang đối mặt với cùng một vấn đề. Chúng tôi có Test, Staging, configs sống mà thay thế thiết bị đầu cuối, dây kết nối vv từ mặc định Web.config

Tuy nhiên tôi sẽ làm như sau:

  • Nhấp chuột phải vào cấu hình mong muốn chuyển đổi (ví dụ Web .Live.config)
  • Bấm vào "Preview transform"
  • Sao chép tất cả mọi thứ từ bên phải (đó là cách web.config trông với việc chuyển đổi)
    • CTRL + A + CTRL + C
  • mở Web.config file (mặc định)
  • Chọn tất cả (Ctrl + A) và dán nó vào (Ctrl + V)
  • Run

Nó không phải là nhiều bước và được thực hiện khá nhanh chóng khi bạn nhận được một hang của nó. Hi vọng điêu nay co ich. :)

+0

Nếu tôi đã hiểu chính xác thì đây là một thay đổi phá hoại đối với tệp web.config gốc. Trong bối cảnh của câu hỏi, các bước này sẽ cần phải được thực hiện mỗi khi một phiên gỡ rối được bắt đầu. –

2

Tôi không muốn cập nhật web.config trong dự án của tôi chỉ là một tệp kết thúc trong thư mục bin, vì vậy, đây là cách tôi đã làm.

Thêm dòng sau vào cuối csproj (ngay trước thẻ dự án đóng cửa cuối cùng)

<Target Name="Transform"> 
    <MakeDir Directories="bin" Condition="!Exists('bin')" /> 
    <TransformXml Source="Web.Config" Transform="Web.$(Configuration).config" Destination="bin\$(TargetFileName).config" StackTrace="true" /> 
    </Target> 

Sau đó, thêm bài sau xây dựng bước

"$(MSBUILDBINPATH)\msbuild" "$(ProjectPath)" /t:Transform /p:Configuration=$(ConfigurationName);Platform=AnyCPU 

này có nghĩa là khi bạn xây dựng một chuyển đổi diễn ra từ các cấu hình gỡ lỗi/phát hành để WebsiteName.Config tập tin trong thư mục bin đầu ra do đó không can thiệp với web.config chính trong dự án.

+2

Điều này sẽ chuyển đổi cấu hình trong thư mục bin, tiếc là cấu hình này không bao giờ được sử dụng. Các cấu hình nạp thực sự là Web.Config trong thư mục dự án, không phải là một trong thư mục bin. – Mick

10

Tôi đã giải quyết điều này một cách đơn giản hơn, bằng cách thêm phần này vào cuối tệp .csproj, ngay trước thẻ. Điều này tương tự như câu trả lời của keitn, với sự khác biệt rằng nó không sử dụng sự kiện xây dựng bài đăng.

<Target Name="BeforeBuild"> 
    <TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" /> 
</Target> 
+1

Xác nhận, nó hoạt động. Nhưng hãy cẩn thận, nó sửa đổi bản sao cục bộ của Web.config. Vì vậy, nếu bạn đang sử dụng các biến đổi XSLT như RemoveAttributes, nó chắc chắn bị xóa! Hoạt động tốt với SetAttributes –

+0

cảm ơn! công việc này cho tôi! – panicoper

+0

Điều này đã làm chính xác những gì tôi đang tìm kiếm. Đơn giản và thẳng vào vấn đề. Không chắc tại sao tất cả các giải pháp khác phải phức tạp như vậy. –

-1

@ologesa: nhu cầu giải pháp của bạn viết truy cập vào Web.config gốc (bạn phải check-out trong TFS). Giải pháp tốt hơn là trực tiếp tạo Web.config trong thư mục bin như keitn thực hiện điều này. Khi chúng tôi kết hợp keitn và giải pháp của bạn, chúng tôi có được điều này:

<Target Name="BeforeBuild"> 
    <Message Text="Transforming Web.config from Web.$(Configuration).config" Importance="high" /> 
    <MakeDir Directories="bin" Condition="!Exists('bin')" /> 
    <TransformXml Source="Web.Config" Transform="Web.$(Configuration).config" Destination="bin\$(TargetFileName).config" StackTrace="true" /> 
</Target> 
+2

Sẽ được tốt đẹp nhưng như Mick nhận xét; tệp này không được sử dụng. Làm cách nào để ứng dụng hoặc IIS sử dụng tệp cấu hình này? – HMR

1

Sau khi đọc nhiều bài đăng tương tự và gặp sự cố với tệp không thể ghi đè hoặc web.config không thể truy cập được vì chỉ đọc đây là tôi đã làm việc cho tôi:

<Target Name="BeforeBuild" Condition="$(Configuration) == 'MyAltDebugConfiguration'"> 
    <ItemGroup> 
     <OriginalWebConfig Include="$(ProjectDir)Web.config"/> 
     <TempWebConfig Include="$(ProjectDir)TempWeb.config"/> 
    </ItemGroup> 
    <Exec Command="&quot;$(DevEnvDir)tf.exe&quot; checkout &quot;$(ProjectDir)Web.config&quot;" /> 
    <Copy SourceFiles="@(OriginalWebConfig)" DestinationFiles="@(TempWebConfig)" /> 
    <TransformXml Source="$(ProjectDir)TempWeb.config" 
          Transform="Web.$(Configuration).config" 
          Destination="Web.config" /> 
    </Target> 

Ghi chú:

này chạy như mục tiêu BeforeBuild.

Tôi chỉ muốn nó chạy theo một cấu hình nhất định (một môi trường gỡ lỗi thay thế) và vì vậy đó là lý do tại sao tôi có Điều kiện. Khi triển khai thông qua triển khai web, mục tiêu xuất bản sẽ khởi động và tôi không cần mục tiêu này để chạy.

Tôi không muốn phải nhớ để kiểm tra web.config (chỉ để hoàn tác nó khi tôi làm xong) vì vậy tôi kiểm tra web.config trước khi bắt đầu chuyển đổi. Nếu bạn không sử dụng TFS, bạn có thể xóa dòng này.

Bởi vì VS (2010) \ msbuild không muốn buông web.config Nguồn tôi sử dụng một tập tin tạm thời (nhờ bài viết này để các thông tin: http://www.diaryofaninja.com/blog/2011/09/14/using-custom-webconfig-transformations-in-msbuild)

Tôi đã cố gắng thêm một lệnh để xóa TempWeb.config nhưng VS \ msbuild không muốn buông bỏ nó. Tôi có thể sống với nó vì nó không được thêm vào TFS.

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