From 08fda6842a1232545c769e4d0e7763bd97a1edc3 Mon Sep 17 00:00:00 2001 From: Sergei Vorobev Date: Tue, 2 Aug 2016 11:47:53 -0700 Subject: [PATCH] Replace powershell-based resgen by dotnet C# based one --- build.psm1 | 148 ++++------------------------------------------------- 1 file changed, 10 insertions(+), 138 deletions(-) diff --git a/build.psm1 b/build.psm1 index a87ccd54ac..bfaddc1961 100644 --- a/build.psm1 +++ b/build.psm1 @@ -1276,22 +1276,17 @@ function Start-ResGen [CmdletBinding()] param() - Get-ChildItem $PSScriptRoot/src -Directory | ? { - Get-ChildItem (Join-Path $_.FullName 'resources') -ErrorAction SilentlyContinue} | % { - $_. Name} | % { + # Add .NET CLI tools to PATH + Find-Dotnet - $module = $_ - Get-ChildItem "$PSScriptRoot/src/$module/resources" -Filter '*.resx' | % { - $className = $_.Name.Replace('.resx', '') - $xml = [xml](Get-Content -raw $_.FullName) - - $fileName = $className - $genSource = Get-StronglyTypeCsFileForResx -xml $xml -ModuleName $module -ClassName $className - $outPath = "$PSScriptRoot/src/$module/gen/$fileName.cs" - Write-Verbose "ResGen for $outPath" - New-Item -Type Directory -ErrorAction SilentlyContinue (Split-Path $outPath) > $null - Set-Content -Encoding Ascii -Path $outPath -Value $genSource - } + Push-Location "$PSScriptRoot/src/ResGen" + try + { + Start-NativeExecution { dotnet run } | Write-Verbose + } + finally + { + Pop-Location } } @@ -1576,129 +1571,6 @@ function script:Start-NativeExecution([scriptblock]$sb) } } -function script:Get-StronglyTypeCsFileForResx -{ - param($xml, $ModuleName, $ClassName) - - # Example - # - # $ClassName = Full.Name.Of.The.ClassFoo - # $shortClassName = ClassFoo - # $namespaceName = Full.Name.Of.The - - $shortClassName = $ClassName - $namespaceName = $null - - $lastIndexOfDot = $className.LastIndexOf(".") - if ($lastIndexOfDot -ne -1) - { - $namespaceName = $className.Substring(0, $lastIndexOfDot) - $shortClassName = $className.Substring($lastIndexOfDot + 1) - } - -$banner = @' -//------------------------------------------------------------------------------ -// -// This code was generated by a Start-ResGen funciton from build.psm1. -// To add or remove a member, edit your .ResX file then rerun Start-ResGen. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -{0} -'@ - -$namespace = @' -namespace {0} {{ -{1} -}} -'@ - -$body = @' -using System; -using System.Reflection; - -/// -/// A strongly-typed resource class, for looking up localized strings, etc. -/// -[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] -[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] -[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - -internal class {0} {{ - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal {0}() {{ - }} - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager {{ - get {{ - if (object.ReferenceEquals(resourceMan, null)) {{ - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("{1}.resources.{3}", typeof({0}).GetTypeInfo().Assembly); - resourceMan = temp; - }} - return resourceMan; - }} - }} - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture {{ - get {{ - return resourceCulture; - }} - set {{ - resourceCulture = value; - }} - }} - {2} -}} -'@ - - $entry = @' - - /// - /// Looks up a localized string similar to {1} - /// - internal static string {0} {{ - get {{ - return ResourceManager.GetString("{0}", resourceCulture); - }} - }} -'@ - $entries = $xml.root.data | % { - if ($_) { - $val = $_.value.Replace("`n", "`n ///") - $name = $_.name.Replace(' ', '_') - $entry -f $name,$val - } - } | Out-String - - $bodyCode = $body -f $shortClassName,$ModuleName,$entries,$ClassName - - if ($NamespaceName) - { - $bodyCode = $namespace -f $NamespaceName, $bodyCode - } - - $resultCode = $banner -f $bodyCode - - return $resultCode -replace "`r`n?|`n","`r`n" -} - # Builds coming out of this project can have version number as 'a.b.c' OR 'a.b.c-d-f' # This function converts the above version into major.minor[.build[.revision]] format function Get-PackageVersionAsMajorMinorBuildRevision