14

プロジェクト全体を公開しなくても構成ファイル変換の出力を表示できるツールまたは Visual Studio 2010 拡張機能はありますか? 変換を実行するプロセスは直接呼び出し可能ですか?


編集

もう少しグーグルした後、私はこれに出くわしました

ステップ 4: コマンド ラインから「ステージング」環境用に変換された新しい web.config ファイルを生成する

[スタート] --> [プログラム ファイル] –> [Visual Studio v10.0] –> [Visual Studio ツール] –> [Visual Studio 10.0 コマンド プロンプト] に移動して、Visual Studio コマンド プロンプトを開きます。

以下に示すように、「MSBuild “Path to Application project file (.csproj/.vbproj) ” /t:TransformWebConfig /p:Configuration=Staging」と入力し、Enter キーを押します。

コマンドライン web.config 変換

変換が成功すると、「ステージング」構成の web.config がプロジェクト ルートの下の obj -->Staging フォルダーに保存されます (ソリューション エクスプローラーでは、最初に隠しファイルを非表示にすることでこのフォルダーにアクセスできます)。

変換された web.config

  • ソリューション エクスプローラーで、ボタンをクリックして隠しファイルを表示します。
  • Obj フォルダを開く
  • アクティブな構成に移動します (現在の場合は「ステージング」です)。
  • そこに変換された web.config があります

生成された新しいステージング web.config ファイルの接続文字列セクションが変更されていることを確認できるようになりました。

ソース: Web 配置: Web.Config 変換

少なくとも彼が投稿したコマンドを使用して、プロジェクト全体をビルドする必要があるため、これは私にとって完璧なソリューションではありません。MSBuild コマンドを使用してビルド手順をスキップする方法を誰かが知っていれば、それは役に立ちます (ただし、それはややありそうにありません)。

編集 2

また、CodePlex でこのConfig Transformation Toolを見つけました。これは、変換プロセスを拡張する優れた機能を提供します。これは、私が探している機能に最も近いツールであり、プレビューを作成する拡張機能を開発するための優れた出発点となります。Microsoft.Web.Publishing.Tasks ライブラリを使用して変換を実行し、実際のプロジェクトのビルドに依存しません。

4

4 に答える 4

12

visualstudiogalleryの SlowCheetah VS アドインを使用すると、変換結果をプレビューできます

于 2011-08-26T08:52:07.037 に答える
7

MSBuild タスクが使用するのと同じオブジェクトを使用して、MSBuild を完全にバイパスして、構成ファイルを変換できます。Web 構成変換ロジックは、Microsoft.Web.Publishing.Tasks ライブラリに含まれています。

次のコード スニペットは、Microsoft.Web.Publishing.Tasks ライブラリ (私のマシンの C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web にインストールされている) を参照する単純なクラス ライブラリからのものです。 .

このサンプルは、ソース ドキュメントと変換を読み込み、変換を適用して、結果を新しいファイルに書き込みます。

using System;
using Microsoft.Web.Publishing.Tasks;

// ...

var xmlTarget = new XmlTransformableDocument();
xmlTarget.PreserveWhitespace = true;
xmlTarget.Load("Web.config");

var xmlTransform = new XmlTransformation("Web.Release.config");

if (xmlTransform.Apply(xmlTarget))
    xmlTarget.Save("Web.Transformed.config");
else
    Console.WriteLine("Unable to apply transform.");

少し創造性を働かせれば、この単純なソリューションを Visual Studio プラグインに統合することができます (おそらく web.config ファイルのコンテキスト メニュー項目として)。少なくとも、コンソール ユーティリティまたはスクリプトを作成して、プレビューを生成できます。

幸運を!

于 2010-09-29T14:29:53.613 に答える
2

古い投稿ですが、見つけたものを簡単なグーグルで共有すると思いました(見つけられなかった、または最初にここで試した人のために):

Web.config Transformation Tester - By AppHarbor
元の XML を変換 XML と一緒に貼り付けるだけで、結果が即座に表示されます。

また、興味のある方にはオープンソースです。

于 2014-01-16T19:12:59.960 に答える
0

これを少し拡張するだけです。上記で説明したものが正確に必要でした。変換のみを実行できるようにします。次に、それをビルド プロセスにフックします。これは、私の場合は TeamCity です。

Microsoft.Web.Publishing.Tasks を使用する必要があります。これは、Nuget で粉砕できます。まあ、私はVS2013にいたのでできました。それ以外の場合は、dll を取得できるはずです。

シンプルなコンソール アプリを作成しました。役に立つかもしれません。

Program.cs

using System;

namespace WebConfigTransform
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length != 3)
            {
                Console.WriteLine("Config Gen ... usage -source -transform -destination");
                Environment.Exit(-1);
            }

            Transform t = new Transform(args[0], args[1], args[2]);
            t.Run();
        }
    }
}

Transform.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Security;
using System.Security.Permissions;
using Microsoft.Web.XmlTransform;

namespace WebConfigTransform
{
    class Transform
    {
        private readonly string m_source;
        private readonly string m_transform;
        private readonly string m_destination;

        public Transform(string source, string transform, string destination)
        {
            m_source = source;
            m_transform = transform;
            m_destination = destination; 
        }

        private void TransformFiles()
        {
            var xmlTarget = new XmlTransformableDocument();
            xmlTarget.PreserveWhitespace = true;
            xmlTarget.Load(m_source);
            var xmlTransform = new XmlTransformation(m_transform);

            if (xmlTransform.Apply(xmlTarget))
                xmlTarget.Save(m_destination);
            else
            {
                Console.WriteLine("Unable to apply transform.");
                Environment.Exit(-1);
            }
        }

        private void CheckPermissions()
        {
            string directoryName = m_destination;
            PermissionSet permissionSet = new PermissionSet(PermissionState.None);
            FileIOPermission writePermission = new FileIOPermission(FileIOPermissionAccess.Write, directoryName);
            permissionSet.AddPermission(writePermission);
            if (!(permissionSet.IsSubsetOf(AppDomain.CurrentDomain.PermissionSet)))
            {
                Console.WriteLine("Cannot write to file : " + m_destination);
                Environment.Exit(-1);
            }
        }

        private void CheckFileExistance()
        {
            List<string> ls = new List<string>();
            ls.Add(m_source);
            ls.Add(m_transform);
            foreach (string item in ls)
            {
                if (!File.Exists(item))
                {
                    Console.WriteLine("Cannot locate file : " + item);
                    Environment.Exit(-1);
                }
            }
        }

        public void Run()
        {
            CheckFileExistance();
            CheckPermissions();
            TransformFiles();
        }
    }
}
于 2014-11-21T16:36:17.713 に答える