2012-08-01 53 views
5

Tôi đang cố gắng chuyển đổi web.config hoạt động như được mô tả here. Chúng tôi đã sử dụng phương pháp này trên các dự án khác và nó hoạt động mà không có vấn đề, nhưng không phải trên dự án mới này.chuyển đổi web.config từ web.template.xml không hoạt động

Đây là những gì tôi đã cố gắng thử nghiệm không thành công

  • Thay đổi tên của tập tin wpp.targets trong trường hợp tôi có tên dự án sai. Tôi biết một trong những hiện tại tôi đang sử dụng công trình vì nó là người duy nhất gây ra web.config được xây dựng lại từ web.template.xml biến đổi này hoạt động. Chỉ các mẫu phụ không hoạt động.
  • Cố gắng với xdt: Locator = "trận đấu (tên)"
  • Cố gắng .config mở rộng vs .xml, các dự án khác của chúng tôi nơi này hoạt động sử dụng .xml
  • quản lý cấu hình được thiết lập để sử dụng "Test" cấu hình cho dự án tôi đang làm.
  • web.template.Test.xml đã xdt: chuyển = "Thay thế" cho phần tôi muốn thay thế
  • web.template.xml có placeholder
  • Cố gắng loại bỏ các "CopyWebTemplateConfig" đoạn từ wpp.targets như được đề xuất trên câu hỏi ngăn xếp được liên kết bên dưới. Các dự án khác của chúng tôi có điều này và phần "PropertyGroup" đã nhận xét và tôi đã thử cả hai kết hợp.

Tôi đã đọc qua liên kết ở trên nhiều lần và ngăn xếp liên quan này question, nhưng không thể xem vấn đề là gì.

Lưu ý Biến đổi xuất bản hoạt động theo cách. Nó tạo ra một tệp tin web.template.xml chứa các giá trị từ web.template.Test.xml, nhưng không tạo ra một tệp web.config.xml như các hướng dẫn wpp.targets. Vì vậy, đây là một vấn đề với việc chuyển đổi xây dựng làm việc có vẻ như.

Bất kỳ ai có ý tưởng về những gì còn thiếu?

wpp.targets

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <!-- Make sure web.config will be there even for package/publish --> 
    <Target Name="CopyWebTemplateConfig" BeforeTargets="Build"> 
    <Copy SourceFiles="web.template.xml" 
      DestinationFiles="web.config"/> 
    </Target> 

    <PropertyGroup> 
    <PrepareForRunDependsOn> 
     $(PrepareForRunDependsOn); 
     UpdateWebConfigBeforeRun; 
    </PrepareForRunDependsOn> 
    </PropertyGroup> 

    <!-- This target will run right before you run your app in Visual Studio --> 
    <Target Name="UpdateWebConfigBeforeRun"> 
    <Message Text="Configuration: $(Configuration): Web.template.$(Configuration).xml"/> 
    <TransformXml Source="web.template.xml" 
       Transform="web.template.$(Configuration).xml" 
       Destination="web.config" /> 
    </Target> 

    <!-- Exclude the config template files from the created package --> 
    <Target Name="ExcludeCustomConfigTransformFiles" BeforeTargets="ExcludeFilesFromPackage"> 
    <ItemGroup> 
     <ExcludeFromPackageFiles Include="web.template.xml;web.template.*.xml"/> 
    </ItemGroup> 
    <Message Text="ExcludeFromPackageFiles: @(ExcludeFromPackageFiles)" Importance="high"/> 
    </Target> 
</Project> 

web.template.xml

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
    For more information on how to configure your ASP.NET application, please visit 
    http://go.microsoft.com/fwlink/?LinkId=152368 
    --> 
<configuration> 
    <configSections>   
    <sectionGroup name="TestSettings"></sectionGroup> 
    .... 
    </configSections> 
    .... 
    <TestSettings> 
    </TestSettings> 
    .... 
</configuration> 

web.template.Test.xml

<?xml version="1.0"?> 
<!-- For more information on using transformations 
    see the web.config examples at http://go.microsoft.com/fwlink/?LinkId=214134. --> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <TestSettings xdt:Transform="Replace"> 
    ... 
    </TestSettings> 
</configuration> 

Đầu ra MSBuild

Target "UpdateWebConfigBeforeRun: (TargetId:143)" in file "C:\...\Project.wpp.targets" from project "C:\...\Project.csproj" (target "PrepareForRun" depends on it): 
Task "Message" (TaskId:93) 
    Configuration: Test: Web.template.Test.xml (TaskId:93) 
Done executing task "Message". (TaskId:93) 
Task "TransformXml" (TaskId:94) 
    Transforming Source File: Web.template.xml (TaskId:94) 
    Applying Transform File: Web.template.Test.xml (TaskId:94) 
    Executing Replace (transform line 5, 18) (TaskId:94) 
     on /configuration/TestSettings (TaskId:94) 
     Applying to 'TestSettings' element (source line 121, 4) (TaskId:94) 
     Replaced 'TestSettings' element (TaskId:94) 
    Done executing Replace (TaskId:94) 
    Output File: web.config (TaskId:94) 
    Transformation succeeded (TaskId:94) 
Done executing task "TransformXml". (TaskId:94) 
Done building target "UpdateWebConfigBeforeRun" in project "Project.csproj".: (TargetId:143) 
+0

Bạn có thể gửi cho tôi dự án mẫu không hoạt động không? Email của tôi là sayedha [at] {MicrosoftDOTcom}. –

Trả lời

1

Tôi đã có một giải pháp cho vấn đề của mình, nhưng không chắc chắn nguyên nhân là gì, vì vậy không chắc chắn liệu điều này có giải quyết được trong các trường hợp khác hay không. có một phần khác đã sao chép web.template vào web.config Lưu ý rằng đây là sau UpdateW Mục tiêu ebConfigBeforeRun đã chạy và thực hiện các cập nhật từ tệp biến mẫu phụ thành web.config. Có vẻ như bước cuối cùng này đã ghi đè web.config bằng biến đổi mà tôi muốn.

Tôi không chắc nơi tập lệnh sao chép cuối cùng này đến từ đâu, vì vậy tôi đã thực hiện tìm kiếm tất cả các tệp trên máy tính của tôi tìm kiếm các tệp wpp.target khác. Tôi tìm thấy một số khác trong thư mục mở rộng Cheetah của Slow và thấy một số phần lên trên đã được thiết lập một tài sản "transformOnBuild" thành false.

Nghĩ rằng có xung đột với SlowCheetah, tôi đã gỡ cài đặt nó và các phép biến đổi bắt đầu hoạt động như mong đợi. Điều này vẫn còn hơi lạ vì các giải pháp khác đã làm việc với SlowCheetah được kích hoạt. Tôi đã cài đặt lại SlowCheetah và việc chuyển đổi vẫn tiếp tục hoạt động như mong đợi.

Vì vậy, giải pháp của tôi đã kết thúc là cài đặt lại SlowCheetah. Tôi vẫn còn bối rối về nguyên nhân của vấn đề này là gì, vì vậy nếu bất cứ ai khác đăng câu trả lời cho điều này tôi sẽ cung cấp cho họ tiền thưởng.

0

Tôi đã gặp sự cố tương tự vào tuần trước. Chỉ ra rằng bất cứ khi nào bạn thêm dự án vào một giải pháp trong VS 2010, cấu hình dự án phù hợp sẽ không được áp dụng mọi lúc. Vì vậy, bạn nghĩ rằng bạn có một cấu hình hoạt động nhưng một thực tế là hoạt động trên dự án đó, do đó chuyển đổi bạn mong đợi không được áp dụng.

Kiểm tra các bước trong bình luận cuối cùng về vấn đề này: Custom solution configuration not showing up in Visual Studio 2010

+0

Một dự án mới chưa được thêm vào giải pháp. Khi tôi nói rằng biến đổi đã hoạt động trên các dự án khác, tôi có nghĩa là các giải pháp khác hoặc các hệ thống khác mà chúng tôi đã xây dựng. Tôi đã thử các bước được nêu trong câu trả lời đó, nhưng nó không giải quyết được vấn đề. – Jerry

0

"Tôi biết hiện tại tôi đang sử dụng công trình vì nó là người duy nhất gây web.config được xây dựng lại từ web.template.xml, phép biến đổi này hoạt động. Chỉ có phụ mẫu không có tác dụng."

Liệu này có nghĩa là, các công trình chuyển đổi nhưng TestSettings phần riêng không được chuyển?

Bạn có thể chia sẻ xây dựng đầu ra với msbuild với tính cách rườm rà thiết để chẩn đoán/chi tiết?

+0

Đó là chính xác, biến đổi công trình nhưng phần TestSettings không nhận được chuyển đổi mẫu các mẫu phụ. Làm cách nào để bạn kích hoạt tính toàn vẹn trên bản dựng? – Jerry

+0

Ok tìm thấy cách kích hoạt độ dài chẩn đoán, nhưng đừng nghĩ rằng tôi có thể chia sẻ kết quả công khai. Có phần nào tôi nên xem xét cụ thể không? Trong VS 2010 Tùy chọn => Dự án và Giải pháp => Xây dựng và Chạy => trình đơn thả xuống cho dự án đầu ra xây dựng dự án MSBuild. – Jerry

+0

Tôi đã tìm thấy các thuộc tính web.template.xml trong đầu ra đó cho thấy "TransformOnBuild" được đặt đúng, nhưng tất cả các tệp khác có nó hiển thị là sai. – Jerry

3

Tôi đã cài đặt StyleCop và đang thực hiện ghi đè cho tôi.

Vì vậy, tôi đã gỡ cài đặt và sự cố đã được giải quyết.

Vui là tôi đã cài đặt lại StyleCop và biến đổi vẫn đang hoạt động!

Cũng tại một số điểm, tôi nhận thấy rằng tôi cũng nên xóa phần mục tiêu CopyWebTemplateConfig.

+1

Âm thanh rất giống với kịch bản tôi phác thảo, chỉ cần thay thế StyleCop bằng SlowCheetah. – Jerry

+1

Có. Tin tốt là họ đang xem xét sự hỗ trợ cho web trên F5 để SlowCheetah. https://github.com/sayedihashimi/slow-cheetah/issues/39 Hãy bỏ phiếu cho tất cả mọi người! – user1858286

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