2013-10-14 61 views
0

我有一個XML文件存儲一個GUID作爲屬性,我想從另一個XML文件中設置此屬性值。我注意到Msbuild可能能夠做到這一點。我想出瞭如何閱讀這個屬性,但是我實際上很難設置一個值並保存文件。在一個單獨的文件中設置屬性

這裏是我的XML文件中存儲的GUID作爲一個屬性的代碼(文件名是GUID.properties):

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup>  
     <GUIDProperty>NULL</GUIDProperty> 
    </PropertyGroup> 
</Project> 

這裏是我的XML,我想設置屬性的代碼對於GUID:

<!-- Create GUID for Installation --> 
    <MSBuild.ExtensionPack.Framework.Guid TaskAction="Create"> 
    <Output TaskParameter="FormattedGuidString" PropertyName="GuidString" /> 
    </MSBuild.ExtensionPack.Framework.Guid>  

<!-- Set GUIDProperty in GUID.property --> 
    <MSBuild.ExtensionPack.Xml.XmlFile TaskAction="UpdateElement" File="$(MSBuildProjectDirectory)\GUID.properties" XPath="GUIDProperty" InnerText="$(GuidString)"/> 

所以,我想要做的就是在GUID.properties中設置GUID屬性。如果沒有Msbuild有一個更簡單的方法,我完全是這樣,但對我來說,它看起來像我可能需要Msbuildextensionpack。我對XML和Msbuild不是很熟悉,這就是我在這裏問的原因。

回答

1

我其實並不認爲你需要msbuildextensionpack。 你可以通過使用msbuild來完成。

實施例:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> 
<Target Name="UpdateGuid"> 
    <PropertyGroup> 
     <_xmlFile>guid.properties</_xmlFile> 
     <_newGuid>$([System.Guid]::NewGuid())</_newGuid> 
    </PropertyGroup> 
    <XmlPoke Namespaces="&lt;Namespace Prefix='msb' Uri='http://schemas.microsoft.com/developer/msbuild/2003'/&gt;" 
      XmlInputPath="$(_xmlFile)" 
      Query="/msb:Project/msb:PropertyGroup/msb:GUIDProperty" 
      Value="$(_newGuid)" /> 
</Target> 
</Project> 
+1

我認爲XmlPoke是4.0以上。所以「這取決於」。 OP,請發佈您的MsBuild版本。 – granadaCoder

+0

此解決方案工作。我有4.0。萬分感謝! – Brundle

相關問題