diff --git a/GenerateAllSolution.ps1 b/GenerateAllSolution.ps1 index 90f7126c..bbb6388b 100644 --- a/GenerateAllSolution.ps1 +++ b/GenerateAllSolution.ps1 @@ -148,7 +148,7 @@ foreach ($componentName in $Components) { [void]$projects.Add(".\components\$($componentPath.BaseName)\src\*.csproj") [void]$projects.Add(".\components\$($componentPath.BaseName)\samples\*.Samples.csproj") - [void]$projects.Add(".\components\$($componentPath.BaseName)\tests\*.Tests\*.shproj") + [void]$projects.Add(".\components\$($componentPath.BaseName)\tests\*.shproj") } else { Write-Warning "Component $($componentPath.BaseName) doesn't MultiTarget any of $MultiTargets and won't be added to the solution."; } diff --git a/MultiTarget/EnabledMultiTargets.props b/MultiTarget/EnabledMultiTargets.props index ea21f057..f03e52d4 100644 --- a/MultiTarget/EnabledMultiTargets.props +++ b/MultiTarget/EnabledMultiTargets.props @@ -2,6 +2,6 @@ - wasm;uwp;netstandard; + wasm;wasdk; diff --git a/MultiTarget/GenerateAllProjectReferences.ps1 b/MultiTarget/GenerateAllProjectReferences.ps1 index 8ccf4732..62ca3b02 100644 --- a/MultiTarget/GenerateAllProjectReferences.ps1 +++ b/MultiTarget/GenerateAllProjectReferences.ps1 @@ -35,23 +35,29 @@ foreach ($componentName in $Components) { continue; } - # Find all components source csproj (when wildcard), or find specific component csproj by name. + # Find all components source/sample/test projects (when wildcard), or find specific component projects by component name. foreach ($componentPath in Get-Item "$PSScriptRoot/../../components/$componentName/") { $componentName = $componentPath.BaseName; Write-Output "Generating project references for component $componentName at $componentPath"; - # Find source and sample csproj files + # Find source, sample and test project files $componentSourceCsproj = Get-ChildItem $componentPath/src/*.csproj -ErrorAction SilentlyContinue; $componentSampleCsproj = Get-ChildItem $componentPath/samples/*.csproj -ErrorAction SilentlyContinue; + $componentTestProj = Get-ChildItem $componentPath/tests/*.projitems -ErrorAction SilentlyContinue; # Generate s for sample project # Use source project MultiTarget as first fallback. if ($null -ne $componentSampleCsproj -and (Test-Path $componentSampleCsproj)) { - & $PSScriptRoot\GenerateMultiTargetAwareProjectReferenceProps.ps1 -projectPath $componentSampleCsproj -outputPath "$projectPropsOutputDir/$($componentSampleCsproj.BaseName).props" -MultiTargets $MultiTargets + & $PSScriptRoot\GenerateMultiTargetAwareProjectReferenceProps.ps1 -projectPath $componentSampleCsproj -outputPath "$projectPropsOutputDir/$($componentName).Samples.props" -MultiTargets $MultiTargets } - # Generate s for src project - & $PSScriptRoot\GenerateMultiTargetAwareProjectReferenceProps.ps1 -projectPath $componentSourceCsproj -outputPath "$projectPropsOutputDir/$($componentSourceCsproj.BaseName).props" -MultiTargets $MultiTargets + if ($null -ne $componentTestProj -and (Test-Path $componentTestProj)) { + # Generate references for test project + & $PSScriptRoot\GenerateMultiTargetAwareProjectReferenceProps.ps1 -projectPath $componentTestProj -outputPath "$projectPropsOutputDir/$($componentName).Tests.props" -MultiTargets $MultiTargets + } + + # Generate references for src project + & $PSScriptRoot\GenerateMultiTargetAwareProjectReferenceProps.ps1 -projectPath $componentSourceCsproj -outputPath "$projectPropsOutputDir/$($componentName).Source.props" -MultiTargets $MultiTargets } } diff --git a/MultiTarget/GenerateMultiTargetAwareProjectReferenceProps.ps1 b/MultiTarget/GenerateMultiTargetAwareProjectReferenceProps.ps1 index 6890d89e..dbbd6728 100644 --- a/MultiTarget/GenerateMultiTargetAwareProjectReferenceProps.ps1 +++ b/MultiTarget/GenerateMultiTargetAwareProjectReferenceProps.ps1 @@ -1,12 +1,12 @@ Param ( - [Parameter(HelpMessage = "The full path of the csproj to generated references to.", Mandatory = $true)] + [Parameter(HelpMessage = "The full path of the csproj or projitems to generate a reference to.", Mandatory = $true)] [string]$projectPath, - [Parameter(HelpMessage = "A path to a .props file where generated content should be saved to.", Mandatory = $true)] + [Parameter(HelpMessage = "A path to where the generated .props file containing the reference should be saved to.", Mandatory = $true)] [string]$outputPath, [Parameter(HelpMessage = "The path to the template used to generate the props file.")] - [string]$templatePath = "$PSScriptRoot/MultiTargetAwareProjectReference.props.template", + [string]$templatePath, [Parameter(HelpMessage = "The placeholder text to replace when inserting the project file name into the template.")] [string]$projectFileNamePlaceholder = "[ProjectFileName]", @@ -20,6 +20,16 @@ Param ( [string[]] $MultiTargets = @("uwp", "wasdk", "wpf", "wasm", "linuxgtk", "macos", "ios", "android", "netstandard") ) +if ($projectPath.EndsWith(".projitems")) { + $templatePath = "$PSScriptRoot/MultiTargetAwareSharedProjectImport.props.template" +} elseif ($projectPath.EndsWith(".csproj")) { + $templatePath = "$PSScriptRoot/MultiTargetAwareProjectReference.props.template"; + +} else { + Write-Error "The specified project path is not a valid csproj or projitems file: $projectPath"; + exit(-1); +} + $templateContents = Get-Content -Path $templatePath; $preWorkingDir = $pwd; @@ -29,9 +39,9 @@ $relativeProjectPath = Resolve-Path -Relative -Path $projectPath Set-Location $preWorkingDir; -# Insert csproj file name. -$csprojFileName = [System.IO.Path]::GetFileName($projectPath); -$templateContents = $templateContents -replace [regex]::escape($projectFileNamePlaceholder), $csprojFileName; +# Insert project file name. +$projectFileName = [System.IO.Path]::GetFileName($projectPath); +$templateContents = $templateContents -replace [regex]::escape($projectFileNamePlaceholder), $projectFileName; # Insert component directory $componentDirectoryRelativeToRoot = [System.IO.Path]::GetDirectoryName($relativeProjectPath).TrimStart('.').TrimStart('\'); @@ -67,7 +77,7 @@ function ShouldMultiTargetMsBuildValue([string] $target) { $targeted = @("uwp", "wasdk", "wpf", "wasm", "linuxgtk", "macos", "ios", "android", "netstandard").Where({ ShouldMultiTarget $_ }) if ($targeted.Count -gt 0) { - Write-Host "Generating project references for $([System.IO.Path]::GetFileNameWithoutExtension($csprojFileName)): $($targeted -Join ', ')" + Write-Host "Generating project references for $([System.IO.Path]::GetFileNameWithoutExtension($projectFileName)): $($targeted -Join ', ')" } $templateContents = $templateContents -replace [regex]::escape("[CanTargetWasm]"), "'$(ShouldMultiTargetMsBuildValue "wasm")'"; diff --git a/MultiTarget/MultiTargetAwareSharedProjectImport.props.template b/MultiTarget/MultiTargetAwareSharedProjectImport.props.template new file mode 100644 index 00000000..06c9c8e0 --- /dev/null +++ b/MultiTarget/MultiTargetAwareSharedProjectImport.props.template @@ -0,0 +1,19 @@ + + + + + + diff --git a/ProjectHeads/AllComponents/Tests.Head.AllComponents.props b/ProjectHeads/AllComponents/Tests.Head.AllComponents.props index 8cce938b..3d37ab22 100644 --- a/ProjectHeads/AllComponents/Tests.Head.AllComponents.props +++ b/ProjectHeads/AllComponents/Tests.Head.AllComponents.props @@ -2,9 +2,6 @@ - - - diff --git a/ProjectHeads/AllComponents/Uwp/CommunityToolkit.App.Uwp.csproj b/ProjectHeads/AllComponents/Uwp/CommunityToolkit.App.Uwp.csproj index ef273d6b..2a366ca4 100644 --- a/ProjectHeads/AllComponents/Uwp/CommunityToolkit.App.Uwp.csproj +++ b/ProjectHeads/AllComponents/Uwp/CommunityToolkit.App.Uwp.csproj @@ -15,7 +15,8 @@ - + + CommunityToolkit.App.Uwp diff --git a/ProjectHeads/AllComponents/Wasdk/CommunityToolkit.App.Wasdk.csproj b/ProjectHeads/AllComponents/Wasdk/CommunityToolkit.App.Wasdk.csproj index ed800138..35317eea 100644 --- a/ProjectHeads/AllComponents/Wasdk/CommunityToolkit.App.Wasdk.csproj +++ b/ProjectHeads/AllComponents/Wasdk/CommunityToolkit.App.Wasdk.csproj @@ -14,7 +14,8 @@ - + + diff --git a/ProjectHeads/AllComponents/Wasm/CommunityToolkit.App.Wasm.csproj b/ProjectHeads/AllComponents/Wasm/CommunityToolkit.App.Wasm.csproj index f1bc44a9..ad0e0d70 100644 --- a/ProjectHeads/AllComponents/Wasm/CommunityToolkit.App.Wasm.csproj +++ b/ProjectHeads/AllComponents/Wasm/CommunityToolkit.App.Wasm.csproj @@ -17,7 +17,8 @@ - + +