gpt4 book ai didi

msbuild - 如何获得 msbuild 任务以对文件集合进行配置转换?

转载 作者:行者123 更新时间:2023-12-04 06:43:39 25 4
gpt4 key购买 nike

我正在尝试转换我拥有的项目中的所有 web.config 文件,这是我的树结构:

  • Transform.bat
  • 变换
  • ConfigTransform.proj
  • Web.Transform.config
  • 网站
  • web.config
  • 观看次数
  • web.config

  • 还有更多的 web.config 文件,但我们的想法是这将找到所有这些文件并对它们应用相同的配置转换。

    我从 a blog post I found 得到了一些提示但我陷入了最后一步,即实际的转变。中间还有一些我不太喜欢的粗糙部分(我不太明白我在做什么,而且我显然做错了)。这是我到目前为止的位置:
    <Project ToolsVersion="4.0" DefaultTargets="Transform" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <UsingTask TaskName="TransformXml" AssemblyFile="Tools\Microsoft.Web.Publishing.Tasks.dll"/>

    <PropertyGroup>
    <SitePath>..\..\Website</SitePath>
    <WebConfigTransformInputFile>$(SitePath)\Web.config</WebConfigTransformInputFile>
    <WebConfigTransformFile>Web.Transform.config</WebConfigTransformFile>
    <OutDir>..\N\N\</OutDir>

    </PropertyGroup>

    <ItemGroup>
    <_FilesToTransform Include="$(SitePath)\**\web.config"/>
    </ItemGroup>

    <Target Name="Transform">

    <MakeDir Directories="@(_FilesToTransform->'$(OutDir)%(RelativeDir)')" />

    <TransformXml Source="@(_FilesToTransform->'$(OutDir)%(RelativeDir)%(Filename)%(Extension)')"
    Transform="$(WebConfigTransformFile)"
    Destination="@(_FilesToTransform->'$(OutDir)%(RelativeDir)%(Filename)%(Extension)')" />
    </Target>
    </Project>

    我的 Transform.bat 看起来像这样:
    %systemroot%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe %CD%\Transforms\ConfigTransform.proj

    因此,当我调用批处理时,会创建相应的目录。但是,正如您所看到的,我必须对 OutDir 有点创意,使其成为 ..\N\N。出于某种原因,如果我不这样做,OutDir 路径将与输入目录完全相同。所以我显然需要在 MakeDir 中改变一些东西,但我不确定是什么。

    当它开始进行转换时,真正的问题就出现了。我试图像这样或这样保持 TransformXml Source 参数:
    @(_FilesToTransformNotAppConfig->'%(FullPath)')

    后者给我一个错误“无法打开源文件:不支持给定路径的格式。”前者给了我这个输出:
    Build started 30-4-2012 14:02:48.
    Project "D:\Dev\transform\DoTransforms\Transforms\ConfigTransform.proj" on node 1 (default targets).
    Transform:
    Creating directory "..\N\N\..\..\Website\Views\".
    Transforming Source File: ..\N\N\..\..\Website\Views\Web.config;..\N\N\..\..\Website\Web.config
    D:\Dev\transform\DoTransforms\Transforms\ConfigTransform.proj(32,2): error : Could not open Source file: Could not find a part of the path 'D:\Dev\transform\DoTransforms\Website\Views\Web.config;\Website\Web.config'.
    Transformation failed
    Done Building Project "D:\Dev\transform\DoTransforms\Transforms\ConfigTransform.proj" (default targets) -- FAILED.

    Build FAILED.

    总结我的问题:
  • 如何避免 OutDir 的路径问题?我摆弄了多条路径,但我无法正确解决。
  • 如何让 TransformXml 任务接受 Source 属性中的多个文件?
  • 最佳答案

    我认为你很接近。我在下面粘贴了一个示例,其中显示了如何执行此操作。

    在我的示例中,我发现位于 web.config 文件本身旁边的转换。对于您的方案,您可以只使用指向特定文件的 MSBuild 属性。

    <?xml version="1.0" encoding="utf-8"?>
    <Project DefaultTargets="TransformAll" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>

    <PropertyGroup>
    <Configuration Condition=" '$(Configuration)'=='' ">Release</Configuration>
    <OutputFolder Condition=" '$(OutputFolder)'=='' ">C:\temp\transformed-files\</OutputFolder>
    </PropertyGroup>

    <!--
    This target shows how to transform web.config with a specific transform file associated to that specific web.config file.
    -->
    <Target Name="TransformAll">

    <!-- discover the files to transform -->
    <ItemGroup>
    <FilesToTransofm Include="$(MSBuildProjectDirectory)\**\web.config"/>
    </ItemGroup>

    <!-- Ensure all target directories exist -->
    <MakeDir Directories="@(FilesToTransofm->'$(OutputFolder)%(RecursiveDir)')"/>

    <!-- TransformXml only supports single values for source/transform/destination so use %(FilesToTransofm.Identity)
    to sned only 1 value to it -->
    <TransformXml Source="%(FilesToTransofm.Identity)"
    Transform="@(FilesToTransofm->'%(RecursiveDir)web.$(Configuration).config')"
    Destination="@(FilesToTransofm->'$(OutputFolder)%(RecursiveDir)web.config')" />
    </Target>

    </Project>

    仅供引用,您可以在 https://github.com/sayedihashimi/sayed-samples/tree/master/TransformMultipleWebConfigs 下载完整样本.

    关于msbuild - 如何获得 msbuild 任务以对文件集合进行配置转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10383449/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com