MSBuild-使用通配符创建属性



我目前正在将我的项目转移到Visual Studio 2012并开始使用nuget。因此,我将使用"NUnit Runners"nuget包,而不是NUnit库。

问题是nuget使用包版本创建文件夹。例如,NUnit Runners位于文件夹中:src\packages\NUnit.Runners.2.6.1\

直到现在,Nunit还在我的lib\Nunit文件夹中。因此,在我的MSBuild文件中,我通过指定路径来执行测试:

<PropertyGroup>
    <NUnitFolder>$(MSBuildProjectDirectory)libNUnit</NUnitFolder>
</PropertyGroup>
<NUnit Assemblies="..." ToolPath="$(NUnitFolder)" />

但我不想在我的msbuild任务中指定一个版本号,每次更新NUnit.Runners时我都必须更新这个版本号。

我试着使用CreateProperty,但它似乎不接受通配符。我也尝试过ItemGroup,但它适用于文件列表,而不是文件夹。

最后,我没有尝试创建带有通配符的属性,而是从packages.config文件中检索到NUnit.Runners的版本。

我现在有一个这样的目标:

<Target Name="GetNUnitFolder">
    <!-- Retrieves the version of NUnit.Runners from the solution's packages.config file -->
    <XmlRead Namespace=""
             XPath="packages/package[@id='NUnit.Runners']/@version"
             XmlFileName="$(MSBuildProjectDirectory)src.nugetpackages.config">
        <Output TaskParameter="Value" PropertyName="NUnitVersion" />
    </XmlRead>
    <CreateProperty Value="$(MSBuildProjectDirectory)srcpackagesNUnit.Runners.$(NUnitVersion)tools">
        <Output TaskParameter="Value" PropertyName="NUnitFolder" />      
    </CreateProperty>
</Target>

注意:为了能够使用XmlRead,您需要MSBuildCommunityTasks。

一旦我有了版本,我就会重新构建NUnitFolder属性。

最新更新