$targetFile = Join-Path (Split-Path -parent $PSCommandPath) "..\build\assets.props"; $platforms = @( @{ Platform = "x64"; VCPlatform = "x64"; }, @{ Platform = "x86"; VCPlatform = "Win32"; } ); $srcDir = "`$(MSBuildThisFileDirectory)..\src"; $projects = @( @{ ProjectDirectory = "$srcDir\AspNetCoreModuleV1\AspNetCore"; ProjectName = "AspNetCore.vcxproj"; NativeAsset = "aspnetcore"; BaseOutputPath = "AspNetCoreModuleV1" PropetyName = "AspNetCoreModuleV1Shim" }, @{ ProjectDirectory = "$srcDir\AspNetCoreModuleV2\AspNetCore"; ProjectName = "`AspNetCore.vcxproj"; NativeAsset = "aspnetcorev2"; BaseOutputPath = "AspNetCoreModuleV2" PropetyName = "AspNetCoreModuleV2Shim" }, @{ ProjectDirectory = "$srcDir\AspNetCoreModuleV2\InProcessRequestHandler"; ProjectName = "InProcessRequestHandler.vcxproj"; NativeAsset = "aspnetcorev2_inprocess"; BaseOutputPath = "AspNetCoreModuleV2"; PropetyName = "AspNetCoreModuleV2InProcessHandler" }, @{ ProjectDirectory = "$srcDir\AspNetCoreModuleV2\OutOfProcessRequestHandler"; ProjectName = "OutOfProcessRequestHandler.vcxproj"; NativeAsset = "aspnetcorev2_outofprocess"; BaseOutputPath = "AspNetCoreModuleV2"; PackageSubPath = "`$(AspNetCoreModuleOutOfProcessVersion)\"; PropetyName = "AspNetCoreModuleV2OutOfProcessHandler" } ); $currentPlatform = @{ Platform = "`$(NativePlatform)"; VCPlatform = "`$(NativeVCPlatform)"; }; $components = @(); $shimComponents = @(); $inProcessComponents = @(); $runShimComponents = @(); $runInProcessComponents = @(); $properties = @(); function CopyProperties($from, $to) { foreach ($key in $from.Keys) { $to.Add($key, $from.$key); } } function Write-Group($group, $name) { return $( foreach ($item in $group){ " <$name$(foreach ($pair in $item.GetEnumerator()) { "`n $($pair.Key)=`"`"$($pair.Value)`"`""}) />`n"}); } function Write-Properties($group) { return $( foreach ($item in $group){ "`n <$($item.Name)>$($item.Value)"}); } function New-Component($project, $platform) { $component = [ordered]@{}; CopyProperties -from $platform -to $component; CopyProperties -from $project -to $component; CopyProperties -from @{ Include = "$($project.ProjectDirectory)\$($project.ProjectName)"; DllLocation = "$($project.ProjectDirectory)\bin\`$(Configuration)\$($platform.VCPlatform)\$($project.NativeAsset).dll"; PdbLocation = "$($project.ProjectDirectory)\bin\`$(Configuration)\$($platform.VCPlatform)\$($project.NativeAsset).pdb"; } -to $component; return $component; } foreach ($project in $projects) { foreach ($platform in $platforms) { $component = New-Component $project $platform; $components += $component; if ($project.ProjectName.Contains("InProcess")) { $inProcessComponents += $component; } else { $shimComponents += $component; } } $properties += @{ Name = "$($project.PropetyName)Dll"; Value = "$($project.ProjectDirectory)\bin\`$(Configuration)\`$(NativeVCPlatform)\$($project.NativeAsset).dll"; }; $runComponent = New-Component $project $currentPlatform; if ($project.ProjectName.Contains("InProcess")) { $runInProcessComponents += $runComponent; } else { $runShimComponents += $runComponent; } } $content = @" true x64 `$(Platform) Win32 `$(NativePlatform) $(Write-Group $components "Components" ) $(Write-Group $shimComponents "ShimComponents") $(Write-Group $inProcessComponents "InProcessComponents") $(Write-Group $runShimComponents "RunShimComponents") $(Write-Group $runInProcessComponents "RunInProcessComponents") $(Write-Properties $properties) "@; [IO.File]::WriteAllLines($targetFile, $content)