7

ここで説明されているように、web.config変換を機能させようとしています。この方法は他のプロジェクトでも使用されており、問題なく機能しますが、この新しいプロジェクトでは機能しません。

これが私が成功せずにテストしようとしたものです

  • プロジェクト名を間違えた場合に備えて、wpp.targetsファイルの名前を変更します。この変換が機能するweb.template.xmlからweb.configが再構築されるのは、現在使用しているものだけなので、現在使用しているものが機能することを知っています。サブテンプレートのみが機能しません。
  • xdt:Locator = "Match(name)"で試してみました
  • .config拡張子と.xmlを試してみましたが、これが機能する他のプロジェクトでは.xmlを使用しています
  • 構成マネージャーは、作業中のプロジェクトの「テスト」構成を使用するように設定されています。
  • web.template.Test.xmlには、置き換えたいセクションのxdt:Transform="Replace"があります
  • web.template.xmlにはプレースホルダーがあります
  • 以下にリンクされているスタックの質問で提案されているように、wpp.targetsから「CopyWebTemplateConfig」セクションを削除してみました。他のプロジェクトではこれがあり、「PropertyGroup」セクションがコメントアウトされており、両方の組み合わせを試しました。

上記のリンクとこの関連するスタックの質問を何度も読みましたが、問題が何であるかがわかりません。

公開トランスフォームは、ある意味で機能します。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)
4

5 に答える 5

3

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

なので、アンインストールしたら問題は解決しました。

面白いことに、 を再インストールしましたStyleCopが、変換はまだ機能していました。

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

于 2012-11-28T00:46:02.303 に答える
2

問題の解決策はありますが、原因がわからないため、これが他のケースで解決するかどうかはわかりません。

MSBuild 診断の出力を確認したところ、最後に web.template を web.config にコピーする別のセクションがあることに気付きました。これは、UpdateWebConfigBeforeRun ターゲットが既に実行され、サブ テンプレート変換ファイルから web.config への更新が行われた後であることに注意してください。この最後のステップは、必要な変換で web.config をオーバーライドしているように見えました。

この最後の一連のコピー命令がどこから来たのかわからなかったので、PC 上のすべてのファイルを検索して、他の wpp.target ファイルを探しました。Slow Cheetah の拡張機能フォルダーで別のものを見つけたところ、上部に「transformOnBuild」プロパティを false に設定しているセクションがありました。

SlowCheetah との競合があると考えてアンインストールしたところ、変換が期待どおりに機能し始めました。他のソリューションは SlowCheetah を有効にして動作していたため、これはまだ少し奇妙でした. 気まぐれにSlowCheetahを再インストールしたところ、変換は期待どおりに機能し続けました.

したがって、私の解決策は、SlowCheetah の再インストールでした。私はまだこの問題の原因が何であるかについて混乱しているので、他の誰かがこれに対する回答を投稿した場合、私は彼らに報奨金を与えます.

于 2012-08-07T23:49:19.610 に答える
0

「現在使用しているものが機能することはわかっています。これは、web.configがweb.template.xmlから再構築される唯一の原因であるためです。この変換は機能します。サブテンプレートのみが機能しません。」

これは、変換は機能しますが、TestSettingsセクションだけでは変換されないことを意味しますか?

詳細を診断/詳細に設定して、ビルド出力をmsbuildと共有できますか?

于 2012-08-07T17:33:56.320 に答える
0

このテーマについてブログ記事を書きました。Web アプリケーションで毎日使用しています。このブログ投稿は、slowcheetah の機能がまだ準備できていないためです。 http://www.locktar.nl/general/use-config-transforms-when-debugging-your-web-application/

于 2013-09-06T05:39:58.373 に答える
0

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

この問題の最後のコメントの手順を確認してください:カスタム ソリューション構成が Visual Studio 2010 に表示されない

于 2012-08-07T13:43:56.433 に答える