用于预览配置文件转换的工具

Posted

技术标签:

【中文标题】用于预览配置文件转换的工具【英文标题】:Tools for previewing configuration file transformations 【发布时间】:2011-04-15 21:01:01 【问题描述】:

是否有任何工具或 Visual Studio 2010 扩展允许我查看配置文件转换的输出而不必发布整个项目?执行转换的过程是否可以直接调用?


编辑

在谷歌搜索之后,我发现了this:

第 4 步:从命令行为“暂存”环境生成新的转换 web.config 文件

通过以下方式打开 Visual Studio 命令提示符 开始->程序文件-> Visual Studio v10.0 –> Visual Studio 工具 –> Visual Studio 10.0 命令 提示

键入“MSBuild”应用程序路径 项目文件(.csproj/.vbproj)” /t:TransformWebConfig /p:Configuration=Staging" 然后点击 如下图输入:

一旦转换成功 “暂存”的 web.config 配置将存储在 obj 下 -->项目根目录下的暂存文件夹(在解决方案资源管理器中,您可以 通过首先取消隐藏访问此文件夹 隐藏文件):

在解决方案资源管理器中单击按钮以显示隐藏文件 打开 Obj 文件夹 导航到您的活动配置(在我们当前的情况下,它是“暂存”) 您可以在那里找到转换后的 web.config

您现在可以验证新的 生成的暂存 web.config 文件有 更改的连接字符串部分。

来源:Web Deployment: Web.Config Transformation

这对我来说并不是一个完美的解决方案,因为它仍然需要构建整个项目 - 至少使用他发布的命令。如果有人知道使用 MSBuild 命令跳过构建步骤的方法会有所帮助(尽管这听起来不太可能)。

编辑 2

我还在 CodePlex 上找到了这个Config Transformation Tool,它提供了一些很好的功能来扩展转换过程。这是我所见过的最接近我正在寻找的功能的工具,并且将是开发创建预览的扩展的一个很好的起点。它使用 Microsoft.Web.Publishing.Tasks 库来执行转换,不依赖于构建实际项目。

【问题讨论】:

【参考方案1】:

只是稍微扩展一下。 我需要上面讨论的内容。只能运行转换。 然后将其连接到我的构建过程中,在我的例子中恰好是 TeamCity。

您将需要使用 Microsoft.Web.Publishing.Tasks,您可以使用 Nuget 将其粉碎。好吧,我在 VS2013 中,所以我可以。我敢肯定,否则你可以获取 dll。

编写了一个简单的控制台应用程序。您可能会发现它很有用。

程序.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();
        
    

【讨论】:

【参考方案2】:

旧帖子,但我想我会与快速谷歌分享我发现的内容(对于那些可能没有找到或先在这里尝试过的人):

Web.config Transformation Tester - By AppHarbor 只需将原始 XML 与转换 XML 一起粘贴,即可立即查看结果。

另外,任何有兴趣的人都可以使用open source。

【讨论】:

【参考方案3】:

visualstudiogallery 上的 SlowCheetah VS 插件允许您预览转换结果

【讨论】:

是的,SlowCheetah 将其变为右键单击,因此非常适合此操作 在与变换斗争了半个小时之后,我想我会用谷歌搜索变换工具,来到这里,安装它,它立即显示了我的问题。 2分钟内修复。添加到我的“必备品,以前没有它我是怎么做到的?”工具包。【参考方案4】:

您可以使用 MSBuild 任务使用的相同对象转换配置文件,完全绕过 MSBuild。 Web 配置转换逻辑包含在 Microsoft.Web.Publishing.Tasks 库中。

以下代码 sn-p 来自一个简单的类库,引用 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 文件中的上下文菜单项。至少,您可以制作控制台实用程序或脚本来生成预览。

祝你好运!

【讨论】:

这本质上是我的“编辑 2”段落的扩展。我觉得至少需要这样的工具,我开始自己组装。运气好的话,我希望在不久的将来在扩展库上发布一些东西。感谢您的意见! @Nathan:祝你好运。我期待看到它。 CodePlex 工具通过调用 MSBuild 工作。对于自定义工具,您可能希望直接使用该库,如图所示。帮我一个忙,完成后添加评论。祝你好运! 我最初也认为它可以通过调用 MSBuild 来工作,但在浏览了源代码后,我意识到他正在使用您上面提到的库。从外观上看,构建扩展的功能原型应该不难。 @Nathan - 不错。感谢您的跟进。

以上是关于用于预览配置文件转换的工具的主要内容,如果未能解决你的问题,请参考以下文章

如何文件夹里预览pdf文件

如何文件夹里预览pdf文件

PyQt系列:PyCharm环境配置

Hyperledger Fabric 核心模块configtxlator工具

XNginx - nginx 集群可视化管理工具

kkfileview文件预览转换pdf失败