我需要读取一个属性的xml文件,该属性应该在Next teamcity build中使用。 现在我有配置
<Project ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MSBuildCommunityTasksPath>$(MSBuildProjectDirectory)\.build</MSBuildCommunityTasksPath>
<ExtensionTasksPath>$(MSBuildProjectDirectory)\.build\</ExtensionTasksPath>
</PropertyGroup>
<Import Project="$(MSBuildCommunityTasksPath)\MSBuild.ExtensionPack.tasks"/>
<Target Name="SetValue">
<!-- ReadAttribute -->
<MSBuild.ExtensionPack.Xml.XmlFile TaskAction="ReadElementText" File="my.config" XPath="/configuration/version">
<Output PropertyName="build.PackageVersion" TaskParameter="Value"/>
</MSBuild.ExtensionPack.Xml.XmlFile>
<Message Text="SourceProtocol = $(build.PackageVersion)"/>
</Target>
但是TeamCity中的变量packageversion仍然是空的。
答案 0 :(得分:1)
你选择的值 - build.PackageVersion是无效的msbuild不喜欢这段时间。
您的路径和扩展程序包与$(MSBuildCommunityTasksPath)\MSBuild.ExtensionPack.tasks
混合在一起。应为$(ExtensionTasksPath)\MSBuild.ExtensionPack.tasks.
所以我在本地测试了它 -
<Project ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask AssemblyFile="C:\Program Files (x86)\MSBuild\ExtensionPack\4.0\MSBuild.ExtensionPack.dll" TaskName="MSBuild.ExtensionPack.Xml.XmlFile"/>
<Target Name="Build">
<!-- ReadAttribute -->
<MSBuild.ExtensionPack.Xml.XmlFile TaskAction="ReadElementText" File=".\my.config" XPath="/configuration/version">
<Output PropertyName="PackageVersion" TaskParameter="Value"/>
</MSBuild.ExtensionPack.Xml.XmlFile>
<Message Text="SourceProtocol = $(PackageVersion)"/>
</Target>
</Project>
这可行。