2016-12-14 1 views
2

私は、ビルド時に生成されるいくつかのweb.config変換を(一度に、MsBuildを使用して)持つASP.NETプロジェクトに取り組んでいます。各展開環境用に1つの.configファイル。すべてのweb.configトランスフォームが同じ要素を持つことを自動的に確認する方法はありますか?

EX:

<Target Name="BeforeBuild"> 
     <TransformXml 
      Source="Web.Base.config"  
      Transform="Web.DevServer1.config" 
      Destination="ConfigBuild\Web.DevServer1.config" /> 
     <TransformXml 
      Source="Web.Base.config"  
      Transform="Web.QAServer1.config" 
      Destination="ConfigBuild\Web.QAServer1.config" /> 
     <!-- ... --> 
     <!-- ... --> 
    </Target> 

各変換は、値ベースのWeb.configファイルに置換されているいくつかの要素を有します。管理と私は、変換ファイルの1つで必要な要素が間違って見過ごされる可能性があると懸念しています。

MsBuildや他のVisualStudioツールを使用して、私たちの変換ファイルに要素がないことを自動的に確認する方法はありますか?

このチェックは、ビルド時に実行することをお勧めします。

+0

が、WCTの問題は、本質的に知られていることと、今後の時間の静的すべきものは、(環境ごとの設定は以下のように)完全ではないということですシステムを構築するまで定義されています。変更を行う場合は、技術的に再構築する必要があります。これにより、確かにそうなるはずの2つを分離することが困難になる。 – MickyD

+0

問題を解決しても問題が解決しない場合は、教えてください。 –

+0

遅く返事を申し訳ありません。はい、この回答はとても役に立ちました。 –

答えて

1

自動的に私たちの変換ファイルのどれもが、MSBuildのか、他のいくつかのVisualStudioのツールのいずれかを使用して、任意の要素が欠けていないことを確認するために、そこに方法は何ですか?

あなたは彼らが異なる場合、XmlDocumentクラスを使用して設定ファイルを比較するカスタムタスクを作成、出力するノードメッセージをLog.LogMessageを使用することができます。このように:

using Microsoft.Build.Framework; 
using Microsoft.Build.Utilities; 
using System.Xml; 

namespace Common 
{ 
    public class SimpleTask3 : Task 
    { 
     private string myProperty; 

     // The [Required] attribute indicates a required property. 
     // If a project file invokes this task without passing a value 
     // to this property, the build will fail immediately. 
     [Required] 
     public string MyProperty 
     { 
      get 
      { 
       return myProperty; 
      } 
      set 
      { 
       myProperty = value; 
      } 
     } 

     public override bool Execute() 
     { 
      // Log a high-importance comment 
      Log.LogMessage(MessageImportance.High, "The task was passed \"" + myProperty + "\""); 
      XmlDocument xDoc = new XmlDocument(); 
      xDoc.Load(myProperty + "/web.base.config"); 

      XmlDocument sDoc = new XmlDocument(); 
      sDoc.Load(myProperty + "/ConfigBuild/Web.DevServer1.config"); 

      //compare with them and check the different. 

      //if different 

      Log.LogMessage(MessageImportance.High, "different message"); 
      return true; 
     } 
    } 
} 

のWeb.config:

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.Tasks.dll" /> 

    <Target Name="BeforeBuild"> 
    <!--<Message Text="BuildDependsOn: $(BuildDependsOn)" />--> 
    <Message Text="Inside of BeforeBuild, time: $([System.DateTime]::Now)" /> 
    <TransformXml Source="D:\Project\Msbuild\App1\App2\Web.Base.config" Transform="D:\Project\Msbuild\App1\App2\Web.DevServer1.config" Destination="D:\Project\Msbuild\App1\App2\ConfigBuild\Web.DevServer1.config" /> 
    <TransformXml Source="D:\Project\Msbuild\App1\App2\Web.Base.config" Transform="D:\Project\Msbuild\App1\App2\Web.QAServer1.config" Destination="D:\Project\Msbuild\App1\App2\ConfigBuild\Web.QAServer1.config" /> 
    </Target> 

    <UsingTask TaskName="Common.SimpleTask3" 
     AssemblyFile="D:\Project\Msbuild\App1\Common\bin\Debug\Common.dll"/> 
    <Target Name="AfterBuild"> 
    <SimpleTask3 MyProperty="D:\Project\Msbuild\App1\App2"/> 
    </Target> 
トピックオフ
関連する問題