【问题标题】:how to force config transform on an xml file?如何强制对 xml 文件进行配置转换?
【发布时间】:2017-10-27 13:40:38
【问题描述】:

我刚刚为VS2017安装了Configuration Transform,希望能转换一些XML文件。

不幸的是,它看起来只处理 *.config 文件?!

例如,当我点击 *.config 文件时,我得到“添加配置转换”选项,但它不适用于 XML 文件:

如何转换 XML 文件?

【问题讨论】:

    标签: c# .net visual-studio-2017


    【解决方案1】:

    不幸的是,它看起来只处理 *.config 文件?!

    不正确。您可以转换任何 XML 文件。例如,在MvcSiteMapProvider 中,XML 转换用于为 NuGet 构建.nuspec XML 文件。

    MvcSiteMapProvider.Core.Shared.nuspec

    这是一个“基础”文件,稍后会进行转换。

    <?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

    这是一个为 MVC 5 转换元素的 XML 转换文件:

    <?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>
    

    转型

    这是一个MSBuild file named TransformXml.proj,用于执行 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>
            <Destination></Destination>
        </PropertyGroup>
    
        <Target Name="Transform">
            <TransformXml Source="$(Source)"
                      Transform="$(Transform)"
                      Destination="$(Destination)" />
        </Target>
    </Project>
    

    有关如何获取Microsoft.Web.Publishing.Tasks.dll 的信息,请参阅Which installer installs Microsoft.Web.Publishing.Tasks.dll?

    command to execute from PowerShell 看起来像:

    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 命令可以从可以执行MSBuild.exe 的任何类型的脚本或进程运行。

    【讨论】:

      猜你喜欢
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多