Haney
Haney

Reputation: 34792

MSBuild RegEx Assembly Version

Trying to create an MSBuild task that outputs my code to a folder. All is working except the Regular Expression. My code:

<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>

When I run this, I get this error:

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.

When I try %(SolnFiles.OutVersion) it comes up blank. I'm doing something dumb here, what is it?

Upvotes: 3

Views: 544

Answers (1)

Haney
Haney

Reputation: 34792

Took me a few to figure it out. PropertyGroup variables are referenced as $(Var) while ItemGroup output variables are @() and GetAssemblyIdentity is %() - so I changed:

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

to this:

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

and it worked.

Upvotes: 2

Related Questions