Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 用于预览配置文件转换的工具_Visual Studio 2010_Web Config_Configuration Files_Slowcheetah - Fatal编程技术网

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

Visual studio 2010 用于预览配置文件转换的工具,visual-studio-2010,web-config,configuration-files,slowcheetah,Visual Studio 2010,Web Config,Configuration Files,Slowcheetah,除了发布整个项目外,是否有任何工具或Visual Studio 2010扩展允许我查看配置文件转换的输出?执行转换的流程是否可以直接调用 编辑 在谷歌搜索了一段时间后,我发现: 步骤4:从命令行为“暂存”环境生成新的转换后的web.config文件 按打开Visual Studio命令提示符 要启动-->程序文件–> Visual Studio v10.0–>Visual Studio 工具–>Visual Studio 10.0命令 提示 键入应用程序的“MSBuild”路径 项目文件(.c

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


编辑

在谷歌搜索了一段时间后,我发现:

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

按打开Visual Studio命令提示符 要启动-->程序文件–> Visual Studio v10.0–>Visual Studio 工具–>Visual Studio 10.0命令 提示

键入应用程序的“MSBuild”路径 项目文件(.csproj/.vbproj)” /t:TransformWebConfig /p:Configuration=Staging“和hit 输入如下所示:

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

  • 在解决方案资源管理器中,单击按钮以显示隐藏的文件
  • 打开Obj文件夹
  • 导航到您的活动配置(在我们当前的情况下是“暂存”)
  • 您可以在那里找到转换后的web.config
现在可以验证新的 已生成暂存web.config文件 已更改的连接字符串部分

来源:

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

编辑2


我在CodePlex上也发现了这一点,它提供了一些很好的功能来扩展转换过程。这是我所寻找的功能中最接近的工具,也是开发创建预览的扩展的一个很好的起点。它使用Microsoft.Web.Publishing.Tasks库来执行转换格式,不依赖于生成实际项目。

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

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


祝你好运!

上的SlowCheetah VS加载项允许你预览转换结果

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


只需将原始XML与转换XML一起粘贴,即可立即看到结果


还有,它是为任何感兴趣的人准备的。

只需稍微扩展一下。 我需要的正是上面讨论的内容,以便只运行转换。 然后将其连接到我的构建过程中,在我的案例中,这恰好是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();
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.IO;
使用系统安全;
使用System.Security.Permissions;
使用Microsoft.Web.XmlTransform;
命名空间WebConfigTransform
{
类转换
{
私有只读字符串m_源;
私有只读字符串m_变换;
私有只读字符串m_目的地;
公共转换(字符串源、字符串转换、字符串目标)
{
m_源=源;
m_变换=变换;
目的地=目的地;
}
私有文件()
{
var xmlTarget=新的XmlTransformableDocument();
xmlTarget.PreserveWhitespace=true;
加载(m_源);
var xmlTransform=新的xmlTransform(m_变换);
if(xmlTransform.Apply(xmlTarget))
保存(m_目的地);
其他的
{
WriteLine(“无法应用转换”);
环境。退出(-1);
}
}
私有void CheckPermissions()
{
string directoryName=m_destination;
PermissionSet PermissionSet=新的PermissionSet(PermissionState.None);
FileIOPermission writePermission=新的FileIOPermission(FileIOPermissionAccess.Write,directoryName);
permissionSet.AddPermission(writePermission);
if(!(permissionSet.IsSubsetOf(AppDomain.CurrentDomain.permissionSet)))
{
Console.WriteLine(“无法写入文件:+m_destination”);
环境。退出(-1);
}
}
私有void CheckFileExistance()
{
列表ls=新列表();
ls.添加(m_源);
ls.Add(m_变换);
foreach(ls中的字符串项)
{
如果(!File.Exists(item))
{
Console.WriteLine(“找不到文件:”