2014-12-03 93 views
3

嘗試創建一個MSBuild任務,將我的代碼輸出到文件夾。除正則表達式外,所有工作都正常。我的代碼:當我嘗試%(SolnFiles.OutVersion)它出現空白MSBuild正則表達式彙編版本

The item "D:\Dache\INDIVIDUAL.txt" in item list "SolnFiles" does not define a value for metadata "OutVersion". In order to use this metadata, either qualify it by specifying %(SolnFiles.OutVersion), or ensure that all items in this list define a value for this metadata.

<Target Name="AfterBuild"> 
    <GetAssemblyIdentity AssemblyFiles="$(OutDir)$(TargetFileName)"> 
    <Output TaskParameter="Assemblies" ItemName="TheVersion" /> 
    </GetAssemblyIdentity> 
    <PropertyGroup> 
    <Pattern>(\d+)\.(\d+)\.(\d+)</Pattern> 
    <In>%(TheVersion.Version)</In> 
    <OutVersion>$([System.Text.RegularExpressions.Regex]::Match($(In), $(Pattern)))</OutVersion> 
    </PropertyGroup> 
    <ItemGroup> 
    <OutputFiles Include="$(OutDir)*" Exclude="*.tmp" /> 
    <SolnFiles Include="$(SolutionDir)INDIVIDUAL.txt;$(SolutionDir)LICENSE.txt;$(SolutionDir)README.md" /> 
    </ItemGroup> 

    <Copy SourceFiles="@(OutputFiles)" DestinationFolder="$(SolutionDir)dache-%(OutVersion)\Tests" SkipUnchangedFiles="true" /> 
    <Copy SourceFiles="@(SolnFiles)" DestinationFolder="$(SolutionDir)dache-%(OutVersion)\" SkipUnchangedFiles="true" /> 
</Target> 

當我運行它,我得到這個錯誤。我在這裏做些愚蠢的事情,它是什麼?

回答

1

帶我瞭解了一些。 PropertyGroup變量引用爲$(Var)ItemGroup輸出變量是@()GetAssemblyIdentity%() - 所以我改變:

<Copy SourceFiles="@(OutputFiles)" DestinationFolder="$(SolutionDir)dache-%(OutVersion)\Tests" SkipUnchangedFiles="true" /> 
<Copy SourceFiles="@(SolnFiles)" DestinationFolder="$(SolutionDir)dache-%(OutVersion)\" SkipUnchangedFiles="true" /> 

這樣:

<Copy SourceFiles="@(OutputFiles)" DestinationFolder="$(SolutionDir)dache-$(OutVersion)\Tests" SkipUnchangedFiles="true" /> 
<Copy SourceFiles="@(SolnFiles)" DestinationFolder="$(SolutionDir)dache-$(OutVersion)\" SkipUnchangedFiles="true" /> 

和它的工作。