Visual studio 2010 用于预览配置文件转换的工具
除了发布整个项目外,是否有任何工具或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
编辑 在谷歌搜索了一段时间后,我发现: 步骤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
我在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(“找不到文件:”