如何强制对xml文件进行配置转换? [英] how to force config transform on an xml file?
问题描述
我刚刚为VS2017安装了
如何转换XML文件?
不幸的是,看起来它只* .config文件吗?!
不正确.您可以转换任何XML文件.例如,在 MvcSiteMapProvider 中,XML Transformation用于构建 .nuspec
NuGet的XML文件.
<?xml version ="1.0"?><!-MvcSiteMapProvider.MVCx.Core共享Nuget规范文件;所有软件包都共享此->< package xmlns ="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"><元数据>< id> MvcSiteMapProvider.MVC#mvc_version#.Core</id>< title> MvcSiteMapProvider MVC#mvc_version#Core</title>< version> $ version $</version>< authors> Shad Storhaug的Maarten Balliauw</authors>< requireLicenseAcceptance> false</requireLicenseAcceptance>< summary> MvcSiteMapProvider是一种工具,可为ASP.NET MVC框架提供灵活的菜单,痕迹和SEO功能,类似于ASP.NET SiteMapProvider模型.该项目位于http://github.com/maartenba/MvcSiteMapProvider.<说明>该软件包仅包含MvcSiteMapProvider的核心库.如果您需要引用非MVC项目中的库(例如类库),请使用此包.< language> zh-CN</language><标签> mvc mvc#mvc_version#站点地图mvcsitemap菜单面包屑导航mvcsitemapprovider</tags>< projectUrl> http://github.com/maartenba/MvcSiteMapProvider</projectUrl>< iconUrl> https://raw.githubusercontent.com/maartenba/MvcSiteMapProvider/master/map-icon.gif</iconUrl><依赖关系>< group targetFramework ="net35"></group>< group targetFramework ="net40"></group>< group targetFramework ="net45"></group></dependencies></元数据></package>
..nutrans
这是一个XML转换文件,可以转换MVC 5的元素:
<?xml version ="1.0"?><!-MVC5的Nuget规范文件->< packageInherits ="MvcSiteMapProvider.Shared.nuspec" xmlns ="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd" xmlns:xdt ="http://schemas.microsoft.com/XML文档转换"<元数据><依赖关系>< group targetFramework ="net45" xdt:Locator ="Match(targetFramework)">< dependency id ="Microsoft.AspNet.Razor" version ="[3,4)" xdt:Transform ="Insert"/>< dependency id ="Microsoft.AspNet.WebPages" version ="[3,4)" xdt:Transform ="Insert"/>< dependency id ="Microsoft.AspNet.Mvc" version ="[5,6)" xdt:Transform ="Insert"/></group></dependencies></元数据></package>
转化
这是一个名为 TransformXml.MSBuild的MSBuild文件./code>
用于执行XML转换:
< Project ToolsVersion ="4.0" DefaultTargets ="Transform" xmlns ="http://schemas.microsoft.com/developer/msbuild/2003">< UsingTask TaskName ="TransformXml"AssemblyFile ="$(MSBuildExtensionsPath)\ Microsoft \ VisualStudio \ v10.0 \ Web \ Microsoft.Web.Publishing.Tasks.dll"/>< PropertyGroup>< Source></Source>< Transform></Transform><目的地>/目的地</PropertyGroup><目标名称=转换">< TransformXml Source ="$(Source)"Transform ="$(Transform)"Destination ="$(目的地)"/></Target></Project>
请参阅哪个安装程序将安装Microsoft.Web.Publishing.Tasks.dll?有关如何获取 Microsoft.Web.Publishing.Tasks.dll
的信息.
和可从PowerShell执行的命令看起来像:
function Transform-Nuspec([string] $ source,[string] $ transform,[string] $ destination){$ transform_xml ="$ tools_directory \ TransformXml.proj"写主机为$ destination创建nuspec" -ForegroundColor绿色执行{msbuild $ transform_xml/p:Source = $ source/p:Transform = $ transform/p:Destination = $ destination/v:minimum/nologo}$ nuspec}
MSBuild命令可以从可以执行 MSBuild.exe
的任何类型的脚本或进程中运行.
I've just installed Configuration Transform for VS2017, hoping to transform some XML files.
Unfortunately, it looks like it only does *.config files?!
For example, when I write click on a *.config file, I get the "add config transform" option, but it's not available for XML files:
How do I transform an XML file?
解决方案
Unfortunately, it looks like it only does *.config files?!
Not true. You can transform any XML file. For example, in MvcSiteMapProvider, XML Transformation is used to build the .nuspec
XML files for NuGet.
MvcSiteMapProvider.Core.Shared.nuspec
This is a "base" file that is later transformed.
<?xml version="1.0"?>
<!-- MvcSiteMapProvider.MVCx.Core shared Nuget specification file; all packages share this -->
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>MvcSiteMapProvider.MVC#mvc_version#.Core</id>
<title>MvcSiteMapProvider MVC#mvc_version# Core</title>
<version>$version$</version>
<authors>Maarten Balliauw, Shad Storhaug</authors>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<summary>MvcSiteMapProvider is a tool that provides flexible menus, breadcrumb trails, and SEO features for the ASP.NET MVC framework, similar to the ASP.NET SiteMapProvider model. The project is hosted on http://github.com/maartenba/MvcSiteMapProvider.</summary>
<description>This package contains only the core library for MvcSiteMapProvider. Use this package if you need to reference the library from a non-MVC project such as a class library.</description>
<language>en-US</language>
<tags>mvc mvc#mvc_version# sitemap mvcsitemap menu breadcrumb navigation mvcsitemapprovider</tags>
<projectUrl>http://github.com/maartenba/MvcSiteMapProvider</projectUrl>
<iconUrl>https://raw.githubusercontent.com/maartenba/MvcSiteMapProvider/master/map-icon.gif</iconUrl>
<dependencies>
<group targetFramework="net35">
</group>
<group targetFramework="net40">
</group>
<group targetFramework="net45">
</group>
</dependencies>
</metadata>
</package>
MvcSiteMapProvider.MVC5.Core.nutrans
Here is an XML transformation file that converts elements for MVC 5:
<?xml version="1.0"?>
<!-- Nuget specification file for MVC5 -->
<package inherits="MvcSiteMapProvider.Shared.nuspec" xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<metadata>
<dependencies>
<group targetFramework="net45" xdt:Locator="Match(targetFramework)">
<dependency id="Microsoft.AspNet.Razor" version="[3,4)" xdt:Transform="Insert" />
<dependency id="Microsoft.AspNet.WebPages" version="[3,4)" xdt:Transform="Insert" />
<dependency id="Microsoft.AspNet.Mvc" version="[5,6)" xdt:Transform="Insert" />
</group>
</dependencies>
</metadata>
</package>
Transformation
Here is an MSBuild file named TransformXml.proj
that is used to execute the XML transform:
<Project ToolsVersion="4.0" DefaultTargets="Transform" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="TransformXml"
AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>
<PropertyGroup>
<Source></Source>
<Transform></Transform>
<Destination></Destination>
</PropertyGroup>
<Target Name="Transform">
<TransformXml Source="$(Source)"
Transform="$(Transform)"
Destination="$(Destination)" />
</Target>
</Project>
See Which installer installs Microsoft.Web.Publishing.Tasks.dll? for information about how to obtain Microsoft.Web.Publishing.Tasks.dll
.
And the command to execute from PowerShell looks like:
function Transform-Nuspec ([string] $source, [string] $transform, [string] $destination) {
$transform_xml = "$tools_directory\TransformXml.proj"
Write-Host "Creating nuspec for $destination" -ForegroundColor Green
Exec { msbuild $transform_xml /p:Source=$source /p:Transform=$transform /p:Destination=$destination /v:minimal /nologo }
$nuspec
}
The MSBuild command could be run from any type of script or process that can execute MSBuild.exe
.
这篇关于如何强制对xml文件进行配置转换?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
<?xml version ="1.0"?><!-MvcSiteMapProvider.MVCx.Core共享Nuget规范文件;所有软件包都共享此->< package xmlns ="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"><元数据>< id> MvcSiteMapProvider.MVC#mvc_version#.Core</id>< title> MvcSiteMapProvider MVC#mvc_version#Core</title>< version> $ version $</version>< authors> Shad Storhaug的Maarten Balliauw</authors>< requireLicenseAcceptance> false</requireLicenseAcceptance>< summary> MvcSiteMapProvider是一种工具,可为ASP.NET MVC框架提供灵活的菜单,痕迹和SEO功能,类似于ASP.NET SiteMapProvider模型.该项目位于http://github.com/maartenba/MvcSiteMapProvider.<说明>该软件包仅包含MvcSiteMapProvider的核心库.如果您需要引用非MVC项目中的库(例如类库),请使用此包.< language> zh-CN</language><标签> mvc mvc#mvc_version#站点地图mvcsitemap菜单面包屑导航mvcsitemapprovider</tags>< projectUrl> http://github.com/maartenba/MvcSiteMapProvider</projectUrl>< iconUrl> https://raw.githubusercontent.com/maartenba/MvcSiteMapProvider/master/map-icon.gif</iconUrl><依赖关系>< group targetFramework ="net35"></group>< group targetFramework ="net40"></group>< group targetFramework ="net45"></group></dependencies></元数据></package>
<?xml version ="1.0"?><!-MVC5的Nuget规范文件->< packageInherits ="MvcSiteMapProvider.Shared.nuspec" xmlns ="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd" xmlns:xdt ="http://schemas.microsoft.com/XML文档转换"<元数据><依赖关系>< group targetFramework ="net45" xdt:Locator ="Match(targetFramework)">< dependency id ="Microsoft.AspNet.Razor" version ="[3,4)" xdt:Transform ="Insert"/>< dependency id ="Microsoft.AspNet.WebPages" version ="[3,4)" xdt:Transform ="Insert"/>< dependency id ="Microsoft.AspNet.Mvc" version ="[5,6)" xdt:Transform ="Insert"/></group></dependencies></元数据></package>
TransformXml.MSBuild的MSBuild文件./code>
用于执行XML转换:< Project ToolsVersion ="4.0" DefaultTargets ="Transform" xmlns ="http://schemas.microsoft.com/developer/msbuild/2003">< UsingTask TaskName ="TransformXml"AssemblyFile ="$(MSBuildExtensionsPath)\ Microsoft \ VisualStudio \ v10.0 \ Web \ Microsoft.Web.Publishing.Tasks.dll"/>< PropertyGroup>< Source></Source>< Transform></Transform><目的地>/目的地</PropertyGroup><目标名称=转换">< TransformXml Source ="$(Source)"Transform ="$(Transform)"Destination ="$(目的地)"/></Target></Project>
Microsoft.Web.Publishing.Tasks.dll
的信息. function Transform-Nuspec([string] $ source,[string] $ transform,[string] $ destination){$ transform_xml ="$ tools_directory \ TransformXml.proj"写主机为$ destination创建nuspec" -ForegroundColor绿色执行{msbuild $ transform_xml/p:Source = $ source/p:Transform = $ transform/p:Destination = $ destination/v:minimum/nologo}$ nuspec}
MSBuild.exe
的任何类型的脚本或进程中运行.Unfortunately, it looks like it only does *.config files?!
.nuspec
XML files for NuGet.<?xml version="1.0"?>
<!-- MvcSiteMapProvider.MVCx.Core shared Nuget specification file; all packages share this -->
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>MvcSiteMapProvider.MVC#mvc_version#.Core</id>
<title>MvcSiteMapProvider MVC#mvc_version# Core</title>
<version>$version$</version>
<authors>Maarten Balliauw, Shad Storhaug</authors>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<summary>MvcSiteMapProvider is a tool that provides flexible menus, breadcrumb trails, and SEO features for the ASP.NET MVC framework, similar to the ASP.NET SiteMapProvider model. The project is hosted on http://github.com/maartenba/MvcSiteMapProvider.</summary>
<description>This package contains only the core library for MvcSiteMapProvider. Use this package if you need to reference the library from a non-MVC project such as a class library.</description>
<language>en-US</language>
<tags>mvc mvc#mvc_version# sitemap mvcsitemap menu breadcrumb navigation mvcsitemapprovider</tags>
<projectUrl>http://github.com/maartenba/MvcSiteMapProvider</projectUrl>
<iconUrl>https://raw.githubusercontent.com/maartenba/MvcSiteMapProvider/master/map-icon.gif</iconUrl>
<dependencies>
<group targetFramework="net35">
</group>
<group targetFramework="net40">
</group>
<group targetFramework="net45">
</group>
</dependencies>
</metadata>
</package>
<?xml version="1.0"?>
<!-- Nuget specification file for MVC5 -->
<package inherits="MvcSiteMapProvider.Shared.nuspec" xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<metadata>
<dependencies>
<group targetFramework="net45" xdt:Locator="Match(targetFramework)">
<dependency id="Microsoft.AspNet.Razor" version="[3,4)" xdt:Transform="Insert" />
<dependency id="Microsoft.AspNet.WebPages" version="[3,4)" xdt:Transform="Insert" />
<dependency id="Microsoft.AspNet.Mvc" version="[5,6)" xdt:Transform="Insert" />
</group>
</dependencies>
</metadata>
</package>
TransformXml.proj
that is used to execute the XML transform:<Project ToolsVersion="4.0" DefaultTargets="Transform" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="TransformXml"
AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>
<PropertyGroup>
<Source></Source>
<Transform></Transform>
<Destination></Destination>
</PropertyGroup>
<Target Name="Transform">
<TransformXml Source="$(Source)"
Transform="$(Transform)"
Destination="$(Destination)" />
</Target>
</Project>
Microsoft.Web.Publishing.Tasks.dll
.function Transform-Nuspec ([string] $source, [string] $transform, [string] $destination) {
$transform_xml = "$tools_directory\TransformXml.proj"
Write-Host "Creating nuspec for $destination" -ForegroundColor Green
Exec { msbuild $transform_xml /p:Source=$source /p:Transform=$transform /p:Destination=$destination /v:minimal /nologo }
$nuspec
}
MSBuild.exe
.