首页 文章

MSBuild - 使用通配符创建属性?

提问于
浏览
2

我目前正在将我的项目移至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)\lib\NUnit</NUnitFolder>
</PropertyGroup>
<NUnit Assemblies="..." ToolPath="$(NUnitFolder)" />

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

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

1 回答

  • 2

    最后,在我的情况下,我没有尝试使用通配符创建属性,而是从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\.nuget\packages.config">
            <Output TaskParameter="Value" PropertyName="NUnitVersion" />
        </XmlRead>
    
        <CreateProperty Value="$(MSBuildProjectDirectory)\src\packages\NUnit.Runners.$(NUnitVersion)\tools">
            <Output TaskParameter="Value" PropertyName="NUnitFolder" />      
        </CreateProperty>
    </Target>
    

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

    一旦我有了版本,我就重建了我的NUnitFolder属性 .

相关问题