JD2022-TU1/main/build/sharpmake/Tools/OverrideVersion.targets

69 lines
No EOL
3.2 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<CompileDependsOn>
OverrideAssemblyInfo;
$(CompileDependsOn);
</CompileDependsOn>
</PropertyGroup>
<Target Name="OverrideAssemblyInfo" Condition="'$(AssemblyVersionOverride)' != '' Or '$(AssemblyInformationalVersionOverride)' != ''">
<ItemGroup>
<OriginalAssemblyInfo Include="@(Compile)" Condition="%(Filename) == 'AssemblyInfo' And %(Extension) == '.cs'" />
<Compile Remove="@(OriginalAssemblyInfo)" />
</ItemGroup>
<Copy SourceFiles="@(OriginalAssemblyInfo)" DestinationFiles="@(OriginalAssemblyInfo->'$(IntermediateOutputPath)%(Filename)%(Extension)')">
<Output TaskParameter="DestinationFiles" ItemName="ModifiedAssemblyInfo"/>
</Copy>
<UpdateFile Condition="'$(AssemblyVersionOverride)' != ''"
Files="@(ModifiedAssemblyInfo)"
Regex="AssemblyVersion\(&quot;.*&quot;\)"
ReplacementText="AssemblyVersion(&quot;$(AssemblyVersionOverride)&quot;)" />
<UpdateFile Condition="'$(AssemblyVersionOverride)' != ''"
Files="@(ModifiedAssemblyInfo)"
Regex="AssemblyFileVersion\(&quot;.*&quot;\)"
ReplacementText="AssemblyFileVersion(&quot;$(AssemblyVersionOverride)&quot;)" />
<UpdateFile Condition="'$(AssemblyInformationalVersionOverride)' != ''"
Files="@(ModifiedAssemblyInfo)"
Regex="AssemblyInformationalVersion\(&quot;.*&quot;\)"
ReplacementText="AssemblyInformationalVersion(&quot;$(AssemblyInformationalVersionOverride)&quot;)" />
<ItemGroup>
<Compile Include="@(ModifiedAssemblyInfo)" />
</ItemGroup>
</Target>
<UsingTask TaskName="UpdateFile" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<Files ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
<Regex ParameterType="System.String" Required="true" />
<ReplacementText ParameterType="System.String" Required="true" />
</ParameterGroup>
<Task>
<Reference Include="System.Core" />
<Using Namespace="System" />
<Using Namespace="System.IO" />
<Using Namespace="System.Text.RegularExpressions" />
<Using Namespace="Microsoft.Build.Framework" />
<Using Namespace="Microsoft.Build.Utilities" />
<Code Type="Fragment" Language="cs">
<![CDATA[
try {
var rx = new System.Text.RegularExpressions.Regex(this.Regex);
for (int i = 0; i < Files.Length; ++i)
{
var path = Files[i].GetMetadata("FullPath");
if (!File.Exists(path)) continue;
var txt = File.ReadAllText(path);
txt = rx.Replace(txt, this.ReplacementText);
File.WriteAllText(path, txt);
}
return true;
}
catch (Exception ex) {
Log.LogErrorFromException(ex);
return false;
}
]]>
</Code>
</Task>
</UsingTask>
</Project>