2

如何让 MSBuild 任务使用来自外部 xml 参数文件的参数?

示例:为我的 MSBuild 任务使用来自外部 xml 文件的“MyConnectionStringParameter”。

MSBuild 文件:

<?xml version="1.0"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Migrate">

  <UsingTask TaskName="FluentMigrator.MSBuild.Migrate"
       AssemblyFile="../bin/FluentMigrator.MSBuild.dll"/>

  <PropertyGroup>
      <TargetPath>../bin/Target.dll</TargetPath>
  </PropertyGroup>

  <Target Name="Migrate" >
    <Message Text="Starting FluentMigrator Migration"/>
    <Migrate Database="sqlserver2008"
             Connection="$(MyConnectionStringParameter)"
             Target="$(TargetPath)"
             Verbose="True"
             Output="True"
             OutputFilename="generated.sql">
    </Migrate>
  </Target>
</Project>

参数文件:

<?xml version="1.0" encoding="utf-8"?>
<parameters>
  <setParameter name="MyConnectionStringParameter" value="ParameterValue" />
</parameters>
4

1 回答 1

6

如果您使用的是 MSBuild 4.0 或更高版本……请使用(内置)Xml Peek。

如何使用 XmlPeek 任务?

如果您使用的是 4.0 之前的版本,请使用来自 Ms Build 社区任务的 XmlRead。

https://github.com/loresoft/msbuildtasks

这是一个〜Peek示例:

<Target Name="ReadXmlPeekValue">
    <!-- you do not need a namespace for this example, but I left it in for future reference -->
    <XmlPeek Namespaces="&lt;Namespace Prefix='peanutNamespace' Uri='http://schemas.microsoft.com/developer/msbuild/2003'/&gt;"
         XmlInputPath=".\Parameters.xml" 
         Query="/parameters/setParameter[@name='MyConnectionStringParameter']/@value">
        <Output TaskParameter="Result" ItemName="Peeked" />
    </XmlPeek>

    <Message Text="@(Peeked)"/>



    <XmlPeek Namespaces="&lt;Namespace Prefix='peanutNamespace' Uri='http://schemas.microsoft.com/developer/msbuild/2003'/&gt;"
         XmlInputPath=".\Parameters.xml" 
         Query="/parameters/setParameter[@name='MyConnectionStringParameter']/@value">
        <Output TaskParameter="Result" PropertyName="PeekedSingle" />
    </XmlPeek>

    <Message Text="$(PeekedSingle)"/>


</Target>

如果您需要命名空间,请注意 XML 命名空间必须是 HTML 编码的。

基于这个简单示例的示例:((也显示 XmlPoke))

http://yentran.org/blog/2012/05/11/modifying-config-file-in-an-msbuild-project/

使用“Peek”时,即使使用 msbuild.exe(来自 %WINDIR%\Microsoft.NET\Framework\v4.0.30319),您也必须指定ToolsVersion 。

<Project  ToolsVersion="4.0"  xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
于 2013-09-18T18:49:16.303 回答