Làm cách nào để tôi có thể hợp nhất và sử dụng Web.debug.config
trình gỡ lỗi tích hợp trong visual studio 2010?
Làm cách nào để tôi có thể hợp nhất và sử dụng Web.debug.config
trình gỡ lỗi tích hợp trong visual studio 2010?
Câu trả lời:
Đây là một lỗi đã biết. Tính năng đó chỉ có thể được sử dụng ngay bây giờ như một phần của quá trình triển khai.
Hãy ủng hộ nó, nếu bạn cũng gặp phải điều này, vì vậy điều này sẽ được khắc phục càng sớm càng tốt.
Đ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 nguyên văn các dòng sau ngay 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 nguyên văn 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. Thực hiện việc này cho mỗi cấu hình bản dựng mà bạn muốn các phép biến đổi chạy.
"$(MSBUILDBINPATH)\msbuild" "$(ProjectPath)" /t:Transform /p:Configuration=$(ConfigurationName);Platform=AnyCPU
xcopy "$(ProjectDir)obj\$(ConfigurationName)\Web.Config" "$(ProjectDir)". /F /R /Y
Web.config
, vì vậy tất cả các phép biến đổi của bạn phải là "idempotent" (có thể được áp dụng lại trên kết quả của bất kỳ phép biến đổi nào khác). Nó cũng sẽ khiến bạn không giữ được sự tỉnh táo nếu bạn đặt tệp ở chế độ kiểm soát nguồn (như bạn có thể nên làm). Nhìn chung, một bản hack "đơn giản" giúp chuyển sự phức tạp / đau đớn sang một loạt vấn đề tiếp theo. Tốt nếu bạn có thể giải quyết nó "tốt hơn" ở đó, tệ nếu bạn không. Cũng nên xem xét sử dụng $ (VisualStudioVersion) thay vì mã hóa cứng phiên bản VS (bạn sẽ quên thay đổi nó).
Tôi đã giải quyết vấn đề này theo cách đơn giản hơn, bằng cách thêm nó 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 là 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>
Tôi không muốn cập nhật web.config trong dự án của mình chỉ là cái kết thúc trong thư mục bin nên đây là cách tôi đã thực hiện.
Thêm phần sau vào cuối .csproj (ngay trước thẻ đóng dự án 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ước xây dựng bài đăng sau
"$(MSBUILDBINPATH)\msbuild" "$(ProjectPath)" /t:Transform /p:Configuration=$(ConfigurationName);Platform=AnyCPU
Điều này có nghĩa là khi bạn xây dựng một chuyển đổi sẽ diễn ra từ cấu hình gỡ lỗi / phát hành thành tệp WebsiteName.Config trong thư mục bin đầu ra do đó không can thiệp vào web.config chính trong dự án.
Sau khi đọc nhiều bài đăng tương tự và gặp sự cố tệp không thể ghi đè hoặc không thể truy cập web.config vì chỉ đọc được, đây là những gì tôi đã làm việc cho mình:
<Target Name="BeforeBuild" Condition="$(Configuration) == 'MyAltDebugConfiguration'">
<ItemGroup>
<OriginalWebConfig Include="$(ProjectDir)Web.config"/>
<TempWebConfig Include="$(ProjectDir)TempWeb.config"/>
</ItemGroup>
<Exec Command=""$(DevEnvDir)tf.exe" checkout "$(ProjectDir)Web.config"" />
<Copy SourceFiles="@(OriginalWebConfig)" DestinationFiles="@(TempWebConfig)" />
<TransformXml Source="$(ProjectDir)TempWeb.config"
Transform="Web.$(Configuration).config"
Destination="Web.config" />
</Target>
Ghi chú:
Điều này chạy dưới dạng mục tiêu BeforeBuild.
Tôi chỉ muốn nó chạy dưới một cấu hình nhất định (một môi trường gỡ lỗi thay thế) và đó là lý do tại sao tôi có Điều kiện. Khi triển khai qua web, hãy triển khai mục tiêu xuất bản 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 khi tôi hoàn tất) 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.
Vì VS (2010) \ msbuild không muốn loại bỏ Nguồn web.config, tôi sử dụng một tệp tạm thời (nhờ bài viết này để biết thông tin: http://www.diaryofaninja.com/blog/2011/09/ 14 / using-custom-webconfig-transformations-in-msbuild )
Tôi đã thử thêm một lệnh để xóa TempWeb.config nhưng VS \ msbuild không muốn loại bỏ nó. Tôi có thể sống với nó vì nó không được thêm vào TFS.
The command ""C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\tf.exe" checkout "C:\_Code\RTS\SCTimeSheet\Web.config"" exited with code 9009
. Có ý kiến gì không?
Tôi biết điều này đã cũ, nhưng tôi đang đối mặt với vấn đề tương tự. Chúng tôi có các cấu hình Test, Staging, Live thay thế điểm cuối, chuỗi kết nối, v.v. từ Web.config mặc định
Tuy nhiên, tôi sẽ làm như sau:
Nó không có nhiều bước và được thực hiện khá nhanh chóng khi bạn hiểu rõ. Hi vọng điêu nay co ich. :)
@ologesa: Giải pháp của bạn cần quyền truy cập ghi vào Web.config gốc (bạn phải đăng xuất trong TFS). Giải pháp tốt hơn là tạo trực tiếp Web.config trong thư mục bin như keitn làm điều này. Khi chúng tôi kết hợp keitn's và giải pháp của bạn, chúng tôi nhận được giải pháp 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>