5

hereのように動作するweb.config変換を取得しようとしています。私たちは他のプロジェクトでこのメソッドを使用しましたが、問題なく動作しますが、この新しいプロジェクトでは動作しません。web.template.xmlからのweb.configトランスフォームが動作しない

は、ここで私は、私はプロジェクト名が間違って得た場合にwpp.targetsファイルの名前を変更する成功

  • せずにテストを試してみたものです。私は現在のものを知っています。なぜなら、この変換はweb.template.xmlからweb.configを再構築する唯一のものですからです。サブテンプレートのみが機能しません。 XDTで試してみました
  • :ロケータ=「マッチ(名)」
  • の.xml対.configをしようとした拡張、
  • 設定マネージャがために「テスト」の設定を使用するように設定されている.XML、これは使用を働く私たちの他のプロジェクト私が取り組んでいるプロジェクト。
  • web.template.Test.xmlがXDTがあります=私は
  • web.template.xmlを交換したいセクションの「置き換え」Transformをプレースホルダ
  • はwpp.targetsから「CopyWebTemplateConfig」セクションを削除しようとしています以下にリンクされているスタックの質問に示唆されているように。私たちの他のプロジェクトにはこれがあり、 "PropertyGroup"セクションがコメントアウトされています。私は両方の組み合わせを試しました。

私は上記のリンクとこの関連するスタックquestionを何度も読んだことがありますが、問題の内容を確認することはできません。

パブリッシュ変換はある意味で機能します。 web.template.Test.xmlの値を含むweb.template.xmlファイルが作成されますが、wpp.targetsの指示に従ってweb.config.xmlは作成されません。これは、ビルドトランスフォームがうまく動作するようにすることで、より問題になります。

誰にも分からないことがありますか?

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> 

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

私にサンプルプロジェクトを送ってもらえませんか?私の電子メールはsayedha [at] {MicrosoftDOTcom}です。 –

答えて

1

問題の解決策がありますが、その原因がわからないため、他のケースで解決できるかどうかは不明です。

MSBuild診断の出力を確認して、 web.templateをweb.configにコピーした別のセクションがありました。これはUpdateW ebConfigBeforeRunターゲットはすでに実行されており、サブテンプレート変換ファイルからweb.configへの更新が行われました。この最後のステップは、私が望む変換でweb.configを上書きしていたようです。

この最後のコピー指示がどこから来たのかわからなかったので、私は自分のPC上の他のwpp.targetファイルを探すすべてのファイルを検索しました。私はSlow Cheetahの拡張フォルダで別のものを見つけて、プロパティ "transformOnBuild"をfalseに設定していたトップセクションを見ました。

SlowCheetahと競合があったと考えて、アンインストールして、変換が正常に機能し始めました。これは、SlowCheetahを有効にして他のソリューションが動作して以来、やや奇妙でした。気まぐれに私はSlowCheetahを再インストールし、変換は期待通りに機能し続けました。

私の解決策はSlowCheetahの再インストールに終わった。私はまだこの問題の原因が何であるか混乱しています。だから他の誰かがこれに答えを投稿すれば、私は彼らに恩恵を与えるでしょう。

0

私は先週、同様の問題を持っていました。 VS 2010のソリューションにプロジェクトを追加するたびに、適切なプロジェクト構成が常に適用されないことがわかります。 あなたは設定がアクティブだと思いますが、別のものが実際にそのプロジェクトでアクティブなので、あなたが期待している変換は適用されません。

は、この問題の最後のコメントで手順を確認してください:Custom solution configuration not showing up in Visual Studio 2010

+0

しかし、新しいプロジェクトは解決策に追加されませんでした。トランスフォームが他のプロジェクトで働いていたと言いましたが、私たちが構築した他のソリューションやシステムを意味していました。私はその答えに概説された手順を試しましたが、問題を解決しませんでした。 – Jerry

0

「それはウェブの原因となるだけなので、私は、私は作品を使用している現在のものを知っています。この変換はweb.template.xmlから再構築されます。唯一のサブテンプレートが動作しません。」

を、この平均値は、変換が動作しますが、一人でTestSettingsセクションは変換されません?

を、あなたは、診断/詳細に設定冗長性とのMSBuildでビルド出力を共有することはできますか?

+0

正しいですが、変換は機能しますが、TestSettingsセクションはサブテンプレートから変換されません。 ビルドで冗長性をどのように有効にしますか? – Jerry

+0

診断の冗長性を有効にする方法を見つけましたが、公に出力を共有することはできません。私が特に見なければならないセクションはありますか? VS 2010オプションで=>プロジェクトとソリューション=>ビルドと実行=> MSBuildプロジェクトのビルド出力の詳細表示ドロップダウン。 – Jerry

+0

"TransformOnBuild"がtrueに設定されていることを示す出力のweb.template.xmlプロパティが見つかりましたが、他のすべてのファイルにはfalseと表示されています。 – Jerry

3

私はStyleCopをインストールしていて、それは私のために上書きしていました。

そこでアンインストールして問題を解決しました。

面白いのは、私がStyleCopを再インストールしたことです。トランスフォームはまだ動作しています!

また、いくつかの点で私はCopyWebTemplateConfigターゲットセクションも削除する必要があることに気付きました。

+1

私が概説したシナリオに非常に似ていますが、StyleCopをSlowCheetahに置き換えてください。 – Jerry

+1

はい。良いニュースは、F5とSlowCheetahのウェブサポートを検討していることです。 https://github.com/sayedihashimi/slow-cheetah/issues/39みんなに投票してください! – user1858286

関連する問題