From 7278ce7424dd2d3a15ef543cb5817ac77a08fd1c Mon Sep 17 00:00:00 2001 From: Andrei Borodin Date: Mon, 23 Dec 2019 16:11:42 -0800 Subject: [PATCH 01/18] Initial check-in --- .../Assets/Project.Unity.msb4u.sln | 105 ++++++++++++------ .../MSBuild/settings.json | 2 +- ...pendenciesProjectTemplate.g.props.template | 1 + .../SolutionTemplate.sln.template | 3 + .../Scripts/Exporters/IProjectExporter.cs | 3 +- .../Exporters/TemplatedProjectExporter.cs | 52 ++++++--- .../ProjectGenerator/Scripts/MSBuildTools.cs | 23 +++- 7 files changed, 130 insertions(+), 59 deletions(-) diff --git a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln index c067a8d..6b939e8 100644 --- a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln +++ b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln @@ -3,48 +3,53 @@ Microsoft Visual Studio Solution File, Format Version 12.00 VisualStudioVersion = 15.0.28307.539 MinimumVisualStudioVersion = 10.0.40219.1 # This file is generated by MSBuildForUnity, it will get updated when the assembly definitions change. -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.TextMeshPro", "C:\Projects\MSBuildForUnity\Development\Samples\IntegratedDependencies.Unity\MSBuild\Projects\Unity.TextMeshPro.msb4u.csproj", "{6055BE8E-BEFD-69E4-8B49-212B09B47B2F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Component.WSA", "..\WSASpecific\Component.WSA.msb4u.csproj", "{BB41A40A-FD6B-AD74-0865-83AB52977BDC}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.PackageManagerUI.Editor", "C:\Projects\MSBuildForUnity\Development\Samples\IntegratedDependencies.Unity\MSBuild\Projects\Unity.PackageManagerUI.Editor.msb4u.csproj", "{15A615C7-33AA-2409-09FE-0B28B0D5143C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.TextMeshPro", "..\..\MSBuild\Projects\Unity.TextMeshPro.msb4u.csproj", "{6055BE8E-BEFD-69E4-8B49-212B09B47B2F}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.CollabProxy.Editor", "C:\Projects\MSBuildForUnity\Development\Samples\IntegratedDependencies.Unity\MSBuild\Projects\Unity.CollabProxy.Editor.msb4u.csproj", "{645165C8-1694-74BF-BBEB-8FB0BCFD26F5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.PackageManagerUI.Editor", "..\..\MSBuild\Projects\Unity.PackageManagerUI.Editor.msb4u.csproj", "{15A615C7-33AA-2409-09FE-0B28B0D5143C}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSBuildForUnity", "C:\Projects\MSBuildForUnity\Development\Samples\IntegratedDependencies.Unity\MSBuild\Projects\MSBuildForUnity.msb4u.csproj", "{0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.CollabProxy.Editor", "..\..\MSBuild\Projects\Unity.CollabProxy.Editor.msb4u.csproj", "{645165C8-1694-74BF-BBEB-8FB0BCFD26F5}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.Analytics.DataPrivacy", "C:\Projects\MSBuildForUnity\Development\Samples\IntegratedDependencies.Unity\MSBuild\Projects\Unity.Analytics.DataPrivacy.msb4u.csproj", "{0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSBuildForUnity", "..\..\MSBuild\Projects\MSBuildForUnity.msb4u.csproj", "{0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.TextMeshPro.Editor", "C:\Projects\MSBuildForUnity\Development\Samples\IntegratedDependencies.Unity\MSBuild\Projects\Unity.TextMeshPro.Editor.msb4u.csproj", "{6546D776-5B41-65B4-0850-B3667F981C26}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.Analytics.DataPrivacy", "..\..\MSBuild\Projects\Unity.Analytics.DataPrivacy.msb4u.csproj", "{0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.TextMeshPro.Editor", "..\..\MSBuild\Projects\Unity.TextMeshPro.Editor.msb4u.csproj", "{6546D776-5B41-65B4-0850-B3667F981C26}" ProjectSection(ProjectDependencies) = postProject {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} = {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp", "C:\Projects\MSBuildForUnity\Development\Samples\IntegratedDependencies.Unity\Assets\Assembly-CSharp.msb4u.csproj", "{FE8A6F42-D26E-4974-ADA4-18610F218C67}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp", "..\Assembly-CSharp.msb4u.csproj", "{BC479C00-685F-49C5-9B60-EF1942584972}" ProjectSection(ProjectDependencies) = postProject {6546D776-5B41-65B4-0850-B3667F981C26} = {6546D776-5B41-65B4-0850-B3667F981C26} {15A615C7-33AA-2409-09FE-0B28B0D5143C} = {15A615C7-33AA-2409-09FE-0B28B0D5143C} {645165C8-1694-74BF-BBEB-8FB0BCFD26F5} = {645165C8-1694-74BF-BBEB-8FB0BCFD26F5} + {BB41A40A-FD6B-AD74-0865-83AB52977BDC} = {BB41A40A-FD6B-AD74-0865-83AB52977BDC} {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD} = {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD} {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} = {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} = {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dependencies", "C:\Projects\MSBuildForUnity\Development\Samples\IntegratedDependencies.Unity\Assets\Dependencies.msb4u.csproj", "{DFB08FA4-CBE1-497A-9F1D-9C856FF2428A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dependencies", "..\Dependencies.msb4u.csproj", "{0D77AB82-D4EB-4034-AC54-4CA04D06906C}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Imported Packages", "Imported Packages", "{1208A866-B74A-4F43-BC60-D7D1074D9230}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Imported Packages", "Imported Packages", "{24D1DC92-C9C1-480A-8A28-7AB628EDA87F}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "External Packages", "External Packages", "{364236E7-C3A1-466B-A98A-43F9BA96A7E7}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "External Packages", "External Packages", "{606A79F0-15A4-48C6-AF95-519426FD7392}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -60,6 +65,16 @@ Global Player|WSA = Player|WSA EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|Android.ActiveCfg = InEditor|Android + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|iOS.ActiveCfg = InEditor|iOS + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WindowsStandalone64.ActiveCfg = InEditor|WindowsStandalone64 + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WSA.ActiveCfg = InEditor|WSA + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|Android.ActiveCfg = Player|Android + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|iOS.ActiveCfg = Player|iOS + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WSA.ActiveCfg = Player|WSA {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|Android.ActiveCfg = InEditor|Android {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|iOS.ActiveCfg = InEditor|iOS {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 @@ -120,16 +135,22 @@ Global {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WSA.ActiveCfg = Player|WSA - {FE8A6F42-D26E-4974-ADA4-18610F218C67}.InEditor|Android.ActiveCfg = InEditor|Android - {FE8A6F42-D26E-4974-ADA4-18610F218C67}.InEditor|iOS.ActiveCfg = InEditor|iOS - {FE8A6F42-D26E-4974-ADA4-18610F218C67}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 - {FE8A6F42-D26E-4974-ADA4-18610F218C67}.InEditor|WindowsStandalone64.ActiveCfg = InEditor|WindowsStandalone64 - {FE8A6F42-D26E-4974-ADA4-18610F218C67}.InEditor|WSA.ActiveCfg = InEditor|WSA - {FE8A6F42-D26E-4974-ADA4-18610F218C67}.Player|Android.ActiveCfg = Player|Android - {FE8A6F42-D26E-4974-ADA4-18610F218C67}.Player|iOS.ActiveCfg = Player|iOS - {FE8A6F42-D26E-4974-ADA4-18610F218C67}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 - {FE8A6F42-D26E-4974-ADA4-18610F218C67}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 - {FE8A6F42-D26E-4974-ADA4-18610F218C67}.Player|WSA.ActiveCfg = Player|WSA + {BC479C00-685F-49C5-9B60-EF1942584972}.InEditor|Android.ActiveCfg = InEditor|Android + {BC479C00-685F-49C5-9B60-EF1942584972}.InEditor|iOS.ActiveCfg = InEditor|iOS + {BC479C00-685F-49C5-9B60-EF1942584972}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 + {BC479C00-685F-49C5-9B60-EF1942584972}.InEditor|WindowsStandalone64.ActiveCfg = InEditor|WindowsStandalone64 + {BC479C00-685F-49C5-9B60-EF1942584972}.InEditor|WSA.ActiveCfg = InEditor|WSA + {BC479C00-685F-49C5-9B60-EF1942584972}.Player|Android.ActiveCfg = Player|Android + {BC479C00-685F-49C5-9B60-EF1942584972}.Player|iOS.ActiveCfg = Player|iOS + {BC479C00-685F-49C5-9B60-EF1942584972}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 + {BC479C00-685F-49C5-9B60-EF1942584972}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 + {BC479C00-685F-49C5-9B60-EF1942584972}.Player|WSA.ActiveCfg = Player|WSA + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|Android.Build.0 = InEditor|Android + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|iOS.Build.0 = InEditor|iOS + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WSA.Build.0 = InEditor|WSA + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WSA.Build.0 = Player|WSA {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|Android.Build.0 = InEditor|Android {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|iOS.Build.0 = InEditor|iOS {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 @@ -170,29 +191,41 @@ Global {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WSA.Build.0 = InEditor|WSA - {FE8A6F42-D26E-4974-ADA4-18610F218C67}.InEditor|Android.Build.0 = InEditor|Android - {FE8A6F42-D26E-4974-ADA4-18610F218C67}.InEditor|iOS.Build.0 = InEditor|iOS - {FE8A6F42-D26E-4974-ADA4-18610F218C67}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 - {FE8A6F42-D26E-4974-ADA4-18610F218C67}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 - {FE8A6F42-D26E-4974-ADA4-18610F218C67}.InEditor|WSA.Build.0 = InEditor|WSA - {FE8A6F42-D26E-4974-ADA4-18610F218C67}.Player|Android.Build.0 = Player|Android - {FE8A6F42-D26E-4974-ADA4-18610F218C67}.Player|iOS.Build.0 = Player|iOS - {FE8A6F42-D26E-4974-ADA4-18610F218C67}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 - {FE8A6F42-D26E-4974-ADA4-18610F218C67}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 - {FE8A6F42-D26E-4974-ADA4-18610F218C67}.Player|WSA.Build.0 = Player|WSA + {BC479C00-685F-49C5-9B60-EF1942584972}.InEditor|Android.Build.0 = InEditor|Android + {BC479C00-685F-49C5-9B60-EF1942584972}.InEditor|iOS.Build.0 = InEditor|iOS + {BC479C00-685F-49C5-9B60-EF1942584972}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 + {BC479C00-685F-49C5-9B60-EF1942584972}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 + {BC479C00-685F-49C5-9B60-EF1942584972}.InEditor|WSA.Build.0 = InEditor|WSA + {BC479C00-685F-49C5-9B60-EF1942584972}.Player|Android.Build.0 = Player|Android + {BC479C00-685F-49C5-9B60-EF1942584972}.Player|iOS.Build.0 = Player|iOS + {BC479C00-685F-49C5-9B60-EF1942584972}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 + {BC479C00-685F-49C5-9B60-EF1942584972}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 + {BC479C00-685F-49C5-9B60-EF1942584972}.Player|WSA.Build.0 = Player|WSA EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} = {1208A866-B74A-4F43-BC60-D7D1074D9230} - {15A615C7-33AA-2409-09FE-0B28B0D5143C} = {1208A866-B74A-4F43-BC60-D7D1074D9230} - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5} = {1208A866-B74A-4F43-BC60-D7D1074D9230} - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} = {1208A866-B74A-4F43-BC60-D7D1074D9230} - {6546D776-5B41-65B4-0850-B3667F981C26} = {1208A866-B74A-4F43-BC60-D7D1074D9230} - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD} = {364236E7-C3A1-466B-A98A-43F9BA96A7E7} + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} = {24D1DC92-C9C1-480A-8A28-7AB628EDA87F} + {15A615C7-33AA-2409-09FE-0B28B0D5143C} = {24D1DC92-C9C1-480A-8A28-7AB628EDA87F} + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5} = {24D1DC92-C9C1-480A-8A28-7AB628EDA87F} + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} = {24D1DC92-C9C1-480A-8A28-7AB628EDA87F} + {6546D776-5B41-65B4-0850-B3667F981C26} = {24D1DC92-C9C1-480A-8A28-7AB628EDA87F} + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD} = {606A79F0-15A4-48C6-AF95-519426FD7392} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {89752EEF-6413-4D53-BA9D-DCA0707F134E} EndGlobalSection + GlobalSection(SolutionNotes) = postSolution + {24D1DC92-C9C1-480A-8A28-7AB628EDA87F} = msb4u.generated + {606A79F0-15A4-48C6-AF95-519426FD7392} = msb4u.generated + {BB41A40A-FD6B-AD74-0865-83AB52977BDC} = msb4u.generated + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} = msb4u.generated + {15A615C7-33AA-2409-09FE-0B28B0D5143C} = msb4u.generated + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5} = msb4u.generated + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD} = msb4u.generated + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} = msb4u.generated + {6546D776-5B41-65B4-0850-B3667F981C26} = msb4u.generated + {BC479C00-685F-49C5-9B60-EF1942584972} = msb4u.generated + EndGlobalSection EndGlobal diff --git a/Samples/IntegratedDependencies.Unity/MSBuild/settings.json b/Samples/IntegratedDependencies.Unity/MSBuild/settings.json index 978fcfd..9c418da 100644 --- a/Samples/IntegratedDependencies.Unity/MSBuild/settings.json +++ b/Samples/IntegratedDependencies.Unity/MSBuild/settings.json @@ -1 +1 @@ -{"autoGenerateEnabled":true} \ No newline at end of file +{"version":1,"autoGenerateEnabled":true,"dependenciesProjectGuid":"0d77ab82-d4eb-4034-ac54-4ca04d06906c"} \ No newline at end of file diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/DependenciesProjectTemplate.g.props.template b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/DependenciesProjectTemplate.g.props.template index ccc1049..7b34605 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/DependenciesProjectTemplate.g.props.template +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/DependenciesProjectTemplate.g.props.template @@ -12,6 +12,7 @@ + InEditor $(MSBuildForUnityGeneratedOutputDirectory)\..\Output\obj\Dependencies diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template index ebf9c2f..0b94b26 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template @@ -31,4 +31,7 @@ Global GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {89752EEF-6413-4D53-BA9D-DCA0707F134E} EndGlobalSection + GlobalSection(SolutionNotes) = postSolution +#GENERATED_ITEM_ENTRY_TEMPLATE {} = msb4u.generated + EndGlobalSection EndGlobal diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/IProjectExporter.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/IProjectExporter.cs index c9afe75..2bd32b3 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/IProjectExporter.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/IProjectExporter.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. #if UNITY_EDITOR +using System; using System.IO; namespace Microsoft.Build.Unity.ProjectGeneration.Exporters @@ -36,7 +37,7 @@ public interface IProjectExporter /// Exports the MSBuild solution given the information. /// /// This contains parsed data about the current Unity project. - void ExportSolution(UnityProjectInfo unityProjectInfo); + void ExportSolution(UnityProjectInfo unityProjectInfo, Guid dependenciesProjectGuid); /// /// Generates the Directory.Build.props file that is expected to be used by both generated and non-generated projects alike. diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs index 66d55f8..20e313e 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs @@ -218,12 +218,13 @@ public void GenerateDirectoryPropsFile(UnityProjectInfo unityProjectInfo) } /// - public void ExportSolution(UnityProjectInfo unityProjectInfo) + public void ExportSolution(UnityProjectInfo unityProjectInfo, Guid dependenciesProjectGuid) { string solutionFilePath = GetSolutionFilePath(unityProjectInfo); if (File.Exists(solutionFilePath)) { + ParseExistingSolutionFile(solutionFilePath); File.Delete(solutionFilePath); } ITemplatePart rootTemplatePart = solutionFileTemplate.Root; @@ -235,6 +236,7 @@ public void ExportSolution(UnityProjectInfo unityProjectInfo) ITemplatePart configPlatformMappingTemplate = rootTemplatePart.Templates["CONFIGURATION_PLATFORM_MAPPING"]; ITemplatePart configPlatformEnabledTemplate = rootTemplatePart.Templates["CONFIGURATION_PLATFORM_ENABLED"]; ITemplatePart folderNestedProjectsTemplate = rootTemplatePart.Templates["FOLDER_NESTED_PROJECTS"]; + ITemplatePart generatedItemEntryTemplate = rootTemplatePart.Templates["GENERATED_ITEM_ENTRY"]; CSProjectInfo[] unorderedProjects = unityProjectInfo.CSProjects.Select(t => t.Value).ToArray(); List orderedProjects = new List(); @@ -271,7 +273,7 @@ public void ExportSolution(UnityProjectInfo unityProjectInfo) foreach (CSProjectInfo project in orderedProjects) { TemplateReplacementSet replacementSet = projectTemplate.CreateReplacementSet(rootReplacementSet); - ProcessProjectEntry(project.Name, GetProjectPath(project).FullName, project.Guid, project.ProjectDependencies, projectTemplate, replacementSet); + ProcessProjectEntry(project.Name, solutionFilePath, GetProjectPath(project).FullName, project.Guid, project.ProjectDependencies, projectTemplate, replacementSet); switch (project.AssemblyDefinitionInfo.AssetLocation) { @@ -288,12 +290,14 @@ public void ExportSolution(UnityProjectInfo unityProjectInfo) } } + HashSet generatedItems = new HashSet(); + // Add the "Dependencies" project - ProcessProjectEntry("Dependencies", GetProjectFilePath(Utilities.AssetPath, "Dependencies"), Guid.NewGuid(), null, projectTemplate, projectTemplate.CreateReplacementSet(rootReplacementSet)); + ProcessProjectEntry("Dependencies", solutionFilePath, GetProjectFilePath(Utilities.AssetPath, "Dependencies"), dependenciesProjectGuid, null, projectTemplate, projectTemplate.CreateReplacementSet(rootReplacementSet)); - PopulateFolder(folderTemplate, folderNestedProjectsTemplate, rootReplacementSet, "Built In Packages", builtinPackages); - PopulateFolder(folderTemplate, folderNestedProjectsTemplate, rootReplacementSet, "Imported Packages", importedPacakges); - PopulateFolder(folderTemplate, folderNestedProjectsTemplate, rootReplacementSet, "External Packages", externalPackages); + PopulateFolder(folderTemplate, folderNestedProjectsTemplate, rootReplacementSet, "Built In Packages", builtinPackages, generatedItems); + PopulateFolder(folderTemplate, folderNestedProjectsTemplate, rootReplacementSet, "Imported Packages", importedPacakges, generatedItems); + PopulateFolder(folderTemplate, folderNestedProjectsTemplate, rootReplacementSet, "External Packages", externalPackages, generatedItems); ITemplateToken configPlatform_ConfigurationToken = configPlatformTemplate.Tokens["CONFIGURATION"]; ITemplateToken configPlatform_PlatformToken = configPlatformTemplate.Tokens["PLATFORM"]; @@ -312,8 +316,10 @@ public void ExportSolution(UnityProjectInfo unityProjectInfo) foreach (CSProjectInfo project in orderedProjects.Select(t => t)) { - void ConfigurationTemplateReplace(ITemplatePart templatePart, TemplateReplacementSet replacementSet, string guid, string configuration, string platform) + void ConfigurationTemplateReplace(ITemplatePart templatePart, TemplateReplacementSet replacementSet, Guid guid, string configuration, string platform) { + generatedItems.Add(guid); + templatePart.Tokens["PROJECT_GUID"].AssignValue(replacementSet, guid.ToString().ToUpper()); templatePart.Tokens["PROJECT_CONFIGURATION"].AssignValue(replacementSet, configuration); templatePart.Tokens["PROJECT_PLATFORM"].AssignValue(replacementSet, platform); @@ -326,12 +332,12 @@ void ProcessMappings(Guid guid, string configuration, IReadOnlyDictionary allPlatforms = unityProjectInfo.AvailablePlatforms.ToDictionary(t => t.BuildTarget, t => t); foreach (CSProjectInfo projectInfo in unityProjectInfo.CSProjects.Values) @@ -381,11 +401,13 @@ private void GenerateTopLevelDependenciesProject(UnityProjectInfo unityProjectIn } } - private void PopulateFolder(ITemplatePart folderTemplate, ITemplatePart folderNestedProjectsTemplate, TemplateReplacementSet parentReplacementSet, string folderName, List projects) + private void PopulateFolder(ITemplatePart folderTemplate, ITemplatePart folderNestedProjectsTemplate, TemplateReplacementSet parentReplacementSet, string folderName, List projects, HashSet generatedItems) { if (projects.Count > 0) { - string folderGuid = Guid.NewGuid().ToString().ToUpper(); + Guid guid = Guid.NewGuid(); + generatedItems.Add(guid); + string folderGuid = guid.ToString().ToUpper(); TemplateReplacementSet replacementSet = folderTemplate.CreateReplacementSet(parentReplacementSet); folderTemplate.Tokens["FOLDER_NAME"].AssignValue(replacementSet, folderName); @@ -465,10 +487,10 @@ private List GetPlatformConditions(IReadOnlyDictionary> projectDependencies, ITemplatePart templatePart, TemplateReplacementSet replacementSet) + private void ProcessProjectEntry(string projectName, string solutionPath, string projectPath, Guid projectGuid, IReadOnlyCollection> projectDependencies, ITemplatePart templatePart, TemplateReplacementSet replacementSet) { templatePart.Tokens["PROJECT_NAME"].AssignValue(replacementSet, projectName); - templatePart.Tokens["PROJECT_RELATIVE_PATH"].AssignValue(replacementSet, projectPath); + templatePart.Tokens["PROJECT_RELATIVE_PATH"].AssignValue(replacementSet, Utilities.GetRelativePath(solutionPath, projectPath)); templatePart.Tokens["PROJECT_GUID"].AssignValue(replacementSet, projectGuid.ToString().ToUpper()); ITemplatePart dependencyTemplate = templatePart.Templates["PROJECT_DEPENDENCY"]; diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/MSBuildTools.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/MSBuildTools.cs index 3d8e1c3..db66001 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/MSBuildTools.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/MSBuildTools.cs @@ -17,11 +17,19 @@ namespace Microsoft.Build.Unity.ProjectGeneration { public class MSBuildToolsConfig { + private const int CurrentConfigVersion = 1; + private static string MSBuildSettingsFilePath { get; } = Path.Combine(Utilities.ProjectPath, "MSBuild", "settings.json"); + [SerializeField] + private int version = 0; + [SerializeField] private bool autoGenerateEnabled = false; + [SerializeField] + private string dependenciesProjectGuid = Guid.NewGuid().ToString(); + public bool AutoGenerateEnabled { get => autoGenerateEnabled; @@ -32,6 +40,8 @@ public bool AutoGenerateEnabled } } + public string DependenciesProjectGuid => dependenciesProjectGuid; + private void Save() { File.WriteAllText(MSBuildSettingsFilePath, EditorJsonUtility.ToJson(this)); @@ -46,6 +56,12 @@ public static MSBuildToolsConfig Load() EditorJsonUtility.FromJsonOverwrite(File.ReadAllText(MSBuildSettingsFilePath), toReturn); } + if (CurrentConfigVersion > toReturn.version) + { + toReturn.version = CurrentConfigVersion; + toReturn.Save(); + } + return toReturn; } } @@ -268,7 +284,7 @@ private static void RegenerateEverything(bool reparseUnityData) propsFileGenerationEnd = stopwatch.ElapsedMilliseconds; solutionExportStart = stopwatch.ElapsedMilliseconds; - RegenerateSolution(); + Exporter.ExportSolution(UnityProjectInfo, Guid.Parse(Config.DependenciesProjectGuid)); solutionExportEnd = stopwatch.ElapsedMilliseconds; foreach (string otherFile in TemplateFiles.Instance.OtherFiles) @@ -289,11 +305,6 @@ private static void RegenerateEverything(bool reparseUnityData) } } - private static void RegenerateSolution() - { - Exporter.ExportSolution(UnityProjectInfo); - } - private static void GenerateBuildProjectsFile(string fileName, string solutionPath, IEnumerable compilationPlatforms) { string template = File.ReadAllText(TemplateFiles.Instance.BuildProjectsTemplatePath); From a9c62cbdfa9500ebdde548cd02dbd616f90cb26d Mon Sep 17 00:00:00 2001 From: Andrei Borodin Date: Mon, 23 Dec 2019 16:16:29 -0800 Subject: [PATCH 02/18] Fix relative path. --- .../Assets/Project.Unity.msb4u.sln | 80 +++++++++---------- .../Exporters/TemplatedProjectExporter.cs | 2 +- 2 files changed, 41 insertions(+), 41 deletions(-) diff --git a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln index 6b939e8..365e442 100644 --- a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln +++ b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln @@ -3,36 +3,36 @@ Microsoft Visual Studio Solution File, Format Version 12.00 VisualStudioVersion = 15.0.28307.539 MinimumVisualStudioVersion = 10.0.40219.1 # This file is generated by MSBuildForUnity, it will get updated when the assembly definitions change. -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Component.WSA", "..\WSASpecific\Component.WSA.msb4u.csproj", "{BB41A40A-FD6B-AD74-0865-83AB52977BDC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Component.WSA", "WSASpecific\Component.WSA.msb4u.csproj", "{BB41A40A-FD6B-AD74-0865-83AB52977BDC}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.TextMeshPro", "..\..\MSBuild\Projects\Unity.TextMeshPro.msb4u.csproj", "{6055BE8E-BEFD-69E4-8B49-212B09B47B2F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.TextMeshPro", "..\MSBuild\Projects\Unity.TextMeshPro.msb4u.csproj", "{6055BE8E-BEFD-69E4-8B49-212B09B47B2F}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.PackageManagerUI.Editor", "..\..\MSBuild\Projects\Unity.PackageManagerUI.Editor.msb4u.csproj", "{15A615C7-33AA-2409-09FE-0B28B0D5143C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.PackageManagerUI.Editor", "..\MSBuild\Projects\Unity.PackageManagerUI.Editor.msb4u.csproj", "{15A615C7-33AA-2409-09FE-0B28B0D5143C}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.CollabProxy.Editor", "..\..\MSBuild\Projects\Unity.CollabProxy.Editor.msb4u.csproj", "{645165C8-1694-74BF-BBEB-8FB0BCFD26F5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.CollabProxy.Editor", "..\MSBuild\Projects\Unity.CollabProxy.Editor.msb4u.csproj", "{645165C8-1694-74BF-BBEB-8FB0BCFD26F5}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSBuildForUnity", "..\..\MSBuild\Projects\MSBuildForUnity.msb4u.csproj", "{0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSBuildForUnity", "..\MSBuild\Projects\MSBuildForUnity.msb4u.csproj", "{0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.Analytics.DataPrivacy", "..\..\MSBuild\Projects\Unity.Analytics.DataPrivacy.msb4u.csproj", "{0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.Analytics.DataPrivacy", "..\MSBuild\Projects\Unity.Analytics.DataPrivacy.msb4u.csproj", "{0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.TextMeshPro.Editor", "..\..\MSBuild\Projects\Unity.TextMeshPro.Editor.msb4u.csproj", "{6546D776-5B41-65B4-0850-B3667F981C26}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.TextMeshPro.Editor", "..\MSBuild\Projects\Unity.TextMeshPro.Editor.msb4u.csproj", "{6546D776-5B41-65B4-0850-B3667F981C26}" ProjectSection(ProjectDependencies) = postProject {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} = {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp", "..\Assembly-CSharp.msb4u.csproj", "{BC479C00-685F-49C5-9B60-EF1942584972}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp", "Assembly-CSharp.msb4u.csproj", "{690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}" ProjectSection(ProjectDependencies) = postProject {6546D776-5B41-65B4-0850-B3667F981C26} = {6546D776-5B41-65B4-0850-B3667F981C26} {15A615C7-33AA-2409-09FE-0B28B0D5143C} = {15A615C7-33AA-2409-09FE-0B28B0D5143C} @@ -43,13 +43,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp", "..\Assem {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} = {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dependencies", "..\Dependencies.msb4u.csproj", "{0D77AB82-D4EB-4034-AC54-4CA04D06906C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dependencies", "Dependencies.msb4u.csproj", "{0D77AB82-D4EB-4034-AC54-4CA04D06906C}" ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Imported Packages", "Imported Packages", "{24D1DC92-C9C1-480A-8A28-7AB628EDA87F}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Imported Packages", "Imported Packages", "{71187EB3-7694-4797-B0BE-0C71DD9F3845}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "External Packages", "External Packages", "{606A79F0-15A4-48C6-AF95-519426FD7392}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "External Packages", "External Packages", "{19874270-C515-4214-81F8-4860E9956BA1}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -135,16 +135,16 @@ Global {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WSA.ActiveCfg = Player|WSA - {BC479C00-685F-49C5-9B60-EF1942584972}.InEditor|Android.ActiveCfg = InEditor|Android - {BC479C00-685F-49C5-9B60-EF1942584972}.InEditor|iOS.ActiveCfg = InEditor|iOS - {BC479C00-685F-49C5-9B60-EF1942584972}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 - {BC479C00-685F-49C5-9B60-EF1942584972}.InEditor|WindowsStandalone64.ActiveCfg = InEditor|WindowsStandalone64 - {BC479C00-685F-49C5-9B60-EF1942584972}.InEditor|WSA.ActiveCfg = InEditor|WSA - {BC479C00-685F-49C5-9B60-EF1942584972}.Player|Android.ActiveCfg = Player|Android - {BC479C00-685F-49C5-9B60-EF1942584972}.Player|iOS.ActiveCfg = Player|iOS - {BC479C00-685F-49C5-9B60-EF1942584972}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 - {BC479C00-685F-49C5-9B60-EF1942584972}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 - {BC479C00-685F-49C5-9B60-EF1942584972}.Player|WSA.ActiveCfg = Player|WSA + {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.InEditor|Android.ActiveCfg = InEditor|Android + {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.InEditor|iOS.ActiveCfg = InEditor|iOS + {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 + {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.InEditor|WindowsStandalone64.ActiveCfg = InEditor|WindowsStandalone64 + {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.InEditor|WSA.ActiveCfg = InEditor|WSA + {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.Player|Android.ActiveCfg = Player|Android + {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.Player|iOS.ActiveCfg = Player|iOS + {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 + {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 + {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.Player|WSA.ActiveCfg = Player|WSA {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|Android.Build.0 = InEditor|Android {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|iOS.Build.0 = InEditor|iOS {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 @@ -191,34 +191,34 @@ Global {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WSA.Build.0 = InEditor|WSA - {BC479C00-685F-49C5-9B60-EF1942584972}.InEditor|Android.Build.0 = InEditor|Android - {BC479C00-685F-49C5-9B60-EF1942584972}.InEditor|iOS.Build.0 = InEditor|iOS - {BC479C00-685F-49C5-9B60-EF1942584972}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 - {BC479C00-685F-49C5-9B60-EF1942584972}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 - {BC479C00-685F-49C5-9B60-EF1942584972}.InEditor|WSA.Build.0 = InEditor|WSA - {BC479C00-685F-49C5-9B60-EF1942584972}.Player|Android.Build.0 = Player|Android - {BC479C00-685F-49C5-9B60-EF1942584972}.Player|iOS.Build.0 = Player|iOS - {BC479C00-685F-49C5-9B60-EF1942584972}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 - {BC479C00-685F-49C5-9B60-EF1942584972}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 - {BC479C00-685F-49C5-9B60-EF1942584972}.Player|WSA.Build.0 = Player|WSA + {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.InEditor|Android.Build.0 = InEditor|Android + {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.InEditor|iOS.Build.0 = InEditor|iOS + {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 + {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 + {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.InEditor|WSA.Build.0 = InEditor|WSA + {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.Player|Android.Build.0 = Player|Android + {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.Player|iOS.Build.0 = Player|iOS + {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 + {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 + {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.Player|WSA.Build.0 = Player|WSA EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} = {24D1DC92-C9C1-480A-8A28-7AB628EDA87F} - {15A615C7-33AA-2409-09FE-0B28B0D5143C} = {24D1DC92-C9C1-480A-8A28-7AB628EDA87F} - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5} = {24D1DC92-C9C1-480A-8A28-7AB628EDA87F} - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} = {24D1DC92-C9C1-480A-8A28-7AB628EDA87F} - {6546D776-5B41-65B4-0850-B3667F981C26} = {24D1DC92-C9C1-480A-8A28-7AB628EDA87F} - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD} = {606A79F0-15A4-48C6-AF95-519426FD7392} + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} = {71187EB3-7694-4797-B0BE-0C71DD9F3845} + {15A615C7-33AA-2409-09FE-0B28B0D5143C} = {71187EB3-7694-4797-B0BE-0C71DD9F3845} + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5} = {71187EB3-7694-4797-B0BE-0C71DD9F3845} + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} = {71187EB3-7694-4797-B0BE-0C71DD9F3845} + {6546D776-5B41-65B4-0850-B3667F981C26} = {71187EB3-7694-4797-B0BE-0C71DD9F3845} + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD} = {19874270-C515-4214-81F8-4860E9956BA1} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {89752EEF-6413-4D53-BA9D-DCA0707F134E} EndGlobalSection GlobalSection(SolutionNotes) = postSolution - {24D1DC92-C9C1-480A-8A28-7AB628EDA87F} = msb4u.generated - {606A79F0-15A4-48C6-AF95-519426FD7392} = msb4u.generated + {71187EB3-7694-4797-B0BE-0C71DD9F3845} = msb4u.generated + {19874270-C515-4214-81F8-4860E9956BA1} = msb4u.generated {BB41A40A-FD6B-AD74-0865-83AB52977BDC} = msb4u.generated {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} = msb4u.generated {15A615C7-33AA-2409-09FE-0B28B0D5143C} = msb4u.generated @@ -226,6 +226,6 @@ Global {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD} = msb4u.generated {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} = msb4u.generated {6546D776-5B41-65B4-0850-B3667F981C26} = msb4u.generated - {BC479C00-685F-49C5-9B60-EF1942584972} = msb4u.generated + {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C} = msb4u.generated EndGlobalSection EndGlobal diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs index 20e313e..08dc8c6 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs @@ -490,7 +490,7 @@ private List GetPlatformConditions(IReadOnlyDictionary> projectDependencies, ITemplatePart templatePart, TemplateReplacementSet replacementSet) { templatePart.Tokens["PROJECT_NAME"].AssignValue(replacementSet, projectName); - templatePart.Tokens["PROJECT_RELATIVE_PATH"].AssignValue(replacementSet, Utilities.GetRelativePath(solutionPath, projectPath)); + templatePart.Tokens["PROJECT_RELATIVE_PATH"].AssignValue(replacementSet, Utilities.GetRelativePath(Path.GetDirectoryName(solutionPath), projectPath)); templatePart.Tokens["PROJECT_GUID"].AssignValue(replacementSet, projectGuid.ToString().ToUpper()); ITemplatePart dependencyTemplate = templatePart.Templates["PROJECT_DEPENDENCY"]; From f9537bfe93408c7c71e5bb4a639a48b4e40b3737 Mon Sep 17 00:00:00 2001 From: Andrei Borodin Date: Mon, 23 Dec 2019 16:25:26 -0800 Subject: [PATCH 03/18] Removed empty project sections, corrected project naming --- .../Assets/Project.Unity.msb4u.sln | 94 ++++++++----------- .../SolutionTemplate.sln.template | 2 + .../Exporters/TemplatedProjectExporter.cs | 10 +- 3 files changed, 48 insertions(+), 58 deletions(-) diff --git a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln index 365e442..b2b9a68 100644 --- a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln +++ b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln @@ -3,36 +3,24 @@ Microsoft Visual Studio Solution File, Format Version 12.00 VisualStudioVersion = 15.0.28307.539 MinimumVisualStudioVersion = 10.0.40219.1 # This file is generated by MSBuildForUnity, it will get updated when the assembly definitions change. -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Component.WSA", "WSASpecific\Component.WSA.msb4u.csproj", "{BB41A40A-FD6B-AD74-0865-83AB52977BDC}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Component.WSA.msb4u", "WSASpecific\Component.WSA.msb4u.csproj", "{BB41A40A-FD6B-AD74-0865-83AB52977BDC}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.TextMeshPro", "..\MSBuild\Projects\Unity.TextMeshPro.msb4u.csproj", "{6055BE8E-BEFD-69E4-8B49-212B09B47B2F}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.TextMeshPro.msb4u", "..\MSBuild\Projects\Unity.TextMeshPro.msb4u.csproj", "{6055BE8E-BEFD-69E4-8B49-212B09B47B2F}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.PackageManagerUI.Editor", "..\MSBuild\Projects\Unity.PackageManagerUI.Editor.msb4u.csproj", "{15A615C7-33AA-2409-09FE-0B28B0D5143C}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.PackageManagerUI.Editor.msb4u", "..\MSBuild\Projects\Unity.PackageManagerUI.Editor.msb4u.csproj", "{15A615C7-33AA-2409-09FE-0B28B0D5143C}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.CollabProxy.Editor", "..\MSBuild\Projects\Unity.CollabProxy.Editor.msb4u.csproj", "{645165C8-1694-74BF-BBEB-8FB0BCFD26F5}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.CollabProxy.Editor.msb4u", "..\MSBuild\Projects\Unity.CollabProxy.Editor.msb4u.csproj", "{645165C8-1694-74BF-BBEB-8FB0BCFD26F5}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSBuildForUnity", "..\MSBuild\Projects\MSBuildForUnity.msb4u.csproj", "{0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSBuildForUnity.msb4u", "..\MSBuild\Projects\MSBuildForUnity.msb4u.csproj", "{0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.Analytics.DataPrivacy", "..\MSBuild\Projects\Unity.Analytics.DataPrivacy.msb4u.csproj", "{0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.Analytics.DataPrivacy.msb4u", "..\MSBuild\Projects\Unity.Analytics.DataPrivacy.msb4u.csproj", "{0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.TextMeshPro.Editor", "..\MSBuild\Projects\Unity.TextMeshPro.Editor.msb4u.csproj", "{6546D776-5B41-65B4-0850-B3667F981C26}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.TextMeshPro.Editor.msb4u", "..\MSBuild\Projects\Unity.TextMeshPro.Editor.msb4u.csproj", "{6546D776-5B41-65B4-0850-B3667F981C26}" ProjectSection(ProjectDependencies) = postProject {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} = {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp", "Assembly-CSharp.msb4u.csproj", "{690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.msb4u", "Assembly-CSharp.msb4u.csproj", "{1514B06E-65D0-445D-9521-2DA386D8D709}" ProjectSection(ProjectDependencies) = postProject {6546D776-5B41-65B4-0850-B3667F981C26} = {6546D776-5B41-65B4-0850-B3667F981C26} {15A615C7-33AA-2409-09FE-0B28B0D5143C} = {15A615C7-33AA-2409-09FE-0B28B0D5143C} @@ -43,13 +31,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp", "Assembly {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} = {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dependencies", "Dependencies.msb4u.csproj", "{0D77AB82-D4EB-4034-AC54-4CA04D06906C}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dependencies.msb4u", "Dependencies.msb4u.csproj", "{0D77AB82-D4EB-4034-AC54-4CA04D06906C}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Imported Packages", "Imported Packages", "{71187EB3-7694-4797-B0BE-0C71DD9F3845}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Imported Packages", "Imported Packages", "{5314AAAA-6836-4451-8EF1-C04998BD3530}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "External Packages", "External Packages", "{19874270-C515-4214-81F8-4860E9956BA1}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "External Packages", "External Packages", "{EA139682-DA16-401A-B293-617CFCBC45DC}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -135,16 +121,16 @@ Global {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WSA.ActiveCfg = Player|WSA - {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.InEditor|Android.ActiveCfg = InEditor|Android - {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.InEditor|iOS.ActiveCfg = InEditor|iOS - {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 - {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.InEditor|WindowsStandalone64.ActiveCfg = InEditor|WindowsStandalone64 - {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.InEditor|WSA.ActiveCfg = InEditor|WSA - {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.Player|Android.ActiveCfg = Player|Android - {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.Player|iOS.ActiveCfg = Player|iOS - {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 - {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 - {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.Player|WSA.ActiveCfg = Player|WSA + {1514B06E-65D0-445D-9521-2DA386D8D709}.InEditor|Android.ActiveCfg = InEditor|Android + {1514B06E-65D0-445D-9521-2DA386D8D709}.InEditor|iOS.ActiveCfg = InEditor|iOS + {1514B06E-65D0-445D-9521-2DA386D8D709}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 + {1514B06E-65D0-445D-9521-2DA386D8D709}.InEditor|WindowsStandalone64.ActiveCfg = InEditor|WindowsStandalone64 + {1514B06E-65D0-445D-9521-2DA386D8D709}.InEditor|WSA.ActiveCfg = InEditor|WSA + {1514B06E-65D0-445D-9521-2DA386D8D709}.Player|Android.ActiveCfg = Player|Android + {1514B06E-65D0-445D-9521-2DA386D8D709}.Player|iOS.ActiveCfg = Player|iOS + {1514B06E-65D0-445D-9521-2DA386D8D709}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 + {1514B06E-65D0-445D-9521-2DA386D8D709}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 + {1514B06E-65D0-445D-9521-2DA386D8D709}.Player|WSA.ActiveCfg = Player|WSA {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|Android.Build.0 = InEditor|Android {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|iOS.Build.0 = InEditor|iOS {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 @@ -191,34 +177,34 @@ Global {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WSA.Build.0 = InEditor|WSA - {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.InEditor|Android.Build.0 = InEditor|Android - {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.InEditor|iOS.Build.0 = InEditor|iOS - {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 - {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 - {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.InEditor|WSA.Build.0 = InEditor|WSA - {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.Player|Android.Build.0 = Player|Android - {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.Player|iOS.Build.0 = Player|iOS - {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 - {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 - {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C}.Player|WSA.Build.0 = Player|WSA + {1514B06E-65D0-445D-9521-2DA386D8D709}.InEditor|Android.Build.0 = InEditor|Android + {1514B06E-65D0-445D-9521-2DA386D8D709}.InEditor|iOS.Build.0 = InEditor|iOS + {1514B06E-65D0-445D-9521-2DA386D8D709}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 + {1514B06E-65D0-445D-9521-2DA386D8D709}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 + {1514B06E-65D0-445D-9521-2DA386D8D709}.InEditor|WSA.Build.0 = InEditor|WSA + {1514B06E-65D0-445D-9521-2DA386D8D709}.Player|Android.Build.0 = Player|Android + {1514B06E-65D0-445D-9521-2DA386D8D709}.Player|iOS.Build.0 = Player|iOS + {1514B06E-65D0-445D-9521-2DA386D8D709}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 + {1514B06E-65D0-445D-9521-2DA386D8D709}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 + {1514B06E-65D0-445D-9521-2DA386D8D709}.Player|WSA.Build.0 = Player|WSA EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} = {71187EB3-7694-4797-B0BE-0C71DD9F3845} - {15A615C7-33AA-2409-09FE-0B28B0D5143C} = {71187EB3-7694-4797-B0BE-0C71DD9F3845} - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5} = {71187EB3-7694-4797-B0BE-0C71DD9F3845} - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} = {71187EB3-7694-4797-B0BE-0C71DD9F3845} - {6546D776-5B41-65B4-0850-B3667F981C26} = {71187EB3-7694-4797-B0BE-0C71DD9F3845} - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD} = {19874270-C515-4214-81F8-4860E9956BA1} + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} = {5314AAAA-6836-4451-8EF1-C04998BD3530} + {15A615C7-33AA-2409-09FE-0B28B0D5143C} = {5314AAAA-6836-4451-8EF1-C04998BD3530} + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5} = {5314AAAA-6836-4451-8EF1-C04998BD3530} + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} = {5314AAAA-6836-4451-8EF1-C04998BD3530} + {6546D776-5B41-65B4-0850-B3667F981C26} = {5314AAAA-6836-4451-8EF1-C04998BD3530} + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD} = {EA139682-DA16-401A-B293-617CFCBC45DC} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {89752EEF-6413-4D53-BA9D-DCA0707F134E} EndGlobalSection GlobalSection(SolutionNotes) = postSolution - {71187EB3-7694-4797-B0BE-0C71DD9F3845} = msb4u.generated - {19874270-C515-4214-81F8-4860E9956BA1} = msb4u.generated + {5314AAAA-6836-4451-8EF1-C04998BD3530} = msb4u.generated + {EA139682-DA16-401A-B293-617CFCBC45DC} = msb4u.generated {BB41A40A-FD6B-AD74-0865-83AB52977BDC} = msb4u.generated {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} = msb4u.generated {15A615C7-33AA-2409-09FE-0B28B0D5143C} = msb4u.generated @@ -226,6 +212,6 @@ Global {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD} = msb4u.generated {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} = msb4u.generated {6546D776-5B41-65B4-0850-B3667F981C26} = msb4u.generated - {690BAFCD-9DC8-4BE8-945C-B406C6FFFB6C} = msb4u.generated + {1514B06E-65D0-445D-9521-2DA386D8D709} = msb4u.generated EndGlobalSection EndGlobal diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template index 0b94b26..1322c85 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template @@ -5,9 +5,11 @@ MinimumVisualStudioVersion = 10.0.40219.1 # This file is generated by MSBuildForUnity, it will get updated when the assembly definitions change. #PROJECT_TEMPLATE_START Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "", "", "{}" +#PROJECT_SECTION_TEMPLATE_START ProjectSection(ProjectDependencies) = postProject #PROJECT_DEPENDENCY_TEMPLATE {} = {} EndProjectSection +#PROJECT_SECTION_TEMPLATE_END EndProject #PROJECT_TEMPLATE_END #FOLDER_TEMPLATE_START diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs index 08dc8c6..168360f 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs @@ -273,7 +273,7 @@ public void ExportSolution(UnityProjectInfo unityProjectInfo, Guid dependenciesP foreach (CSProjectInfo project in orderedProjects) { TemplateReplacementSet replacementSet = projectTemplate.CreateReplacementSet(rootReplacementSet); - ProcessProjectEntry(project.Name, solutionFilePath, GetProjectPath(project).FullName, project.Guid, project.ProjectDependencies, projectTemplate, replacementSet); + ProcessProjectEntry(project.Name + ".msb4u", solutionFilePath, GetProjectPath(project).FullName, project.Guid, project.ProjectDependencies, projectTemplate, replacementSet); switch (project.AssemblyDefinitionInfo.AssetLocation) { @@ -293,7 +293,7 @@ public void ExportSolution(UnityProjectInfo unityProjectInfo, Guid dependenciesP HashSet generatedItems = new HashSet(); // Add the "Dependencies" project - ProcessProjectEntry("Dependencies", solutionFilePath, GetProjectFilePath(Utilities.AssetPath, "Dependencies"), dependenciesProjectGuid, null, projectTemplate, projectTemplate.CreateReplacementSet(rootReplacementSet)); + ProcessProjectEntry("Dependencies.msb4u", solutionFilePath, GetProjectFilePath(Utilities.AssetPath, "Dependencies"), dependenciesProjectGuid, null, projectTemplate, projectTemplate.CreateReplacementSet(rootReplacementSet)); PopulateFolder(folderTemplate, folderNestedProjectsTemplate, rootReplacementSet, "Built In Packages", builtinPackages, generatedItems); PopulateFolder(folderTemplate, folderNestedProjectsTemplate, rootReplacementSet, "Imported Packages", importedPacakges, generatedItems); @@ -493,13 +493,15 @@ private void ProcessProjectEntry(string projectName, string solutionPath, string templatePart.Tokens["PROJECT_RELATIVE_PATH"].AssignValue(replacementSet, Utilities.GetRelativePath(Path.GetDirectoryName(solutionPath), projectPath)); templatePart.Tokens["PROJECT_GUID"].AssignValue(replacementSet, projectGuid.ToString().ToUpper()); - ITemplatePart dependencyTemplate = templatePart.Templates["PROJECT_DEPENDENCY"]; + ITemplatePart projectSectionTemplate = templatePart.Templates["PROJECT_SECTION"]; + ITemplatePart dependencyTemplate = projectSectionTemplate.Templates["PROJECT_DEPENDENCY"]; if (projectDependencies != null && projectDependencies.Count > 0) { + TemplateReplacementSet projectSectionReplacementSet = projectSectionTemplate.CreateReplacementSet(replacementSet); foreach (CSProjectDependency project in projectDependencies) { - TemplateReplacementSet set = dependencyTemplate.CreateReplacementSet(replacementSet); + TemplateReplacementSet set = dependencyTemplate.CreateReplacementSet(projectSectionReplacementSet); dependencyTemplate.Tokens["DEPENDENCY_GUID"].AssignValue(set, project.Dependency.Guid.ToString().ToUpper()); } } From dd4199e9ffcac17d70fedad532ba25579d2df8e9 Mon Sep 17 00:00:00 2001 From: Andrei Borodin Date: Tue, 24 Dec 2019 12:42:06 -0800 Subject: [PATCH 04/18] Another change to ensure that when sln is saved, it contents not reorderred. --- .../Assets/Project.Unity.msb4u.sln | 156 +++++++++--------- .../SolutionTemplate.sln.template | 4 +- .../Exporters/TemplatedProjectExporter.cs | 8 +- 3 files changed, 85 insertions(+), 83 deletions(-) diff --git a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln index b2b9a68..5a7ff1e 100644 --- a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln +++ b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln @@ -20,7 +20,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.TextMeshPro.Editor.ms {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} = {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.msb4u", "Assembly-CSharp.msb4u.csproj", "{1514B06E-65D0-445D-9521-2DA386D8D709}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.msb4u", "Assembly-CSharp.msb4u.csproj", "{7112FE59-7306-41A6-A333-0B609A3F9D7E}" ProjectSection(ProjectDependencies) = postProject {6546D776-5B41-65B4-0850-B3667F981C26} = {6546D776-5B41-65B4-0850-B3667F981C26} {15A615C7-33AA-2409-09FE-0B28B0D5143C} = {15A615C7-33AA-2409-09FE-0B28B0D5143C} @@ -33,9 +33,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.msb4u", "As EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dependencies.msb4u", "Dependencies.msb4u.csproj", "{0D77AB82-D4EB-4034-AC54-4CA04D06906C}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Imported Packages", "Imported Packages", "{5314AAAA-6836-4451-8EF1-C04998BD3530}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Imported Packages", "Imported Packages", "{2E3DB4F9-6905-4FFD-B18E-E6BB72759D3F}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "External Packages", "External Packages", "{EA139682-DA16-401A-B293-617CFCBC45DC}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "External Packages", "External Packages", "{F1D962FF-838F-4416-BD0F-BF2D4920EB57}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -52,159 +52,159 @@ Global EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|Android.ActiveCfg = InEditor|Android + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|Android.Build.0 = InEditor|Android {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|iOS.ActiveCfg = InEditor|iOS + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|iOS.Build.0 = InEditor|iOS {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WindowsStandalone64.ActiveCfg = InEditor|WindowsStandalone64 + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WSA.ActiveCfg = InEditor|WSA + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WSA.Build.0 = InEditor|WSA {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|Android.ActiveCfg = Player|Android {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|iOS.ActiveCfg = Player|iOS {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WSA.ActiveCfg = Player|WSA + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WSA.Build.0 = Player|WSA {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|Android.ActiveCfg = InEditor|Android + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|Android.Build.0 = InEditor|Android {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|iOS.ActiveCfg = InEditor|iOS + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|iOS.Build.0 = InEditor|iOS {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|WindowsStandalone64.ActiveCfg = InEditor|WindowsStandalone64 + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|WSA.ActiveCfg = InEditor|WSA + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|WSA.Build.0 = InEditor|WSA {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|Android.ActiveCfg = Player|Android + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|Android.Build.0 = Player|Android {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|iOS.ActiveCfg = Player|iOS + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|iOS.Build.0 = Player|iOS {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|WSA.ActiveCfg = Player|WSA + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|WSA.Build.0 = Player|WSA {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|Android.ActiveCfg = InEditor|Android + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|Android.Build.0 = InEditor|Android {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|iOS.ActiveCfg = InEditor|iOS + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|iOS.Build.0 = InEditor|iOS {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|WindowsStandalone64.ActiveCfg = InEditor|WindowsStandalone64 + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|WSA.ActiveCfg = InEditor|WSA + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|WSA.Build.0 = InEditor|WSA {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|Android.ActiveCfg = Player|Android {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|iOS.ActiveCfg = Player|iOS {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|WSA.ActiveCfg = Player|WSA {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|Android.ActiveCfg = InEditor|Android + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|Android.Build.0 = InEditor|Android {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|iOS.ActiveCfg = InEditor|iOS + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|iOS.Build.0 = InEditor|iOS {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|WindowsStandalone64.ActiveCfg = InEditor|WindowsStandalone64 + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|WSA.ActiveCfg = InEditor|WSA + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|WSA.Build.0 = InEditor|WSA {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|Android.ActiveCfg = Player|Android {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|iOS.ActiveCfg = Player|iOS {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|WSA.ActiveCfg = Player|WSA {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|Android.ActiveCfg = InEditor|Android + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|Android.Build.0 = InEditor|Android {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|iOS.ActiveCfg = InEditor|iOS + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|iOS.Build.0 = InEditor|iOS {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|WindowsStandalone64.ActiveCfg = InEditor|WindowsStandalone64 + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|WSA.ActiveCfg = InEditor|WSA + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|WSA.Build.0 = InEditor|WSA {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|Android.ActiveCfg = Player|Android {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|iOS.ActiveCfg = Player|iOS {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|WSA.ActiveCfg = Player|WSA {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|Android.ActiveCfg = InEditor|Android + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|Android.Build.0 = InEditor|Android {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|iOS.ActiveCfg = InEditor|iOS + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|iOS.Build.0 = InEditor|iOS {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|WindowsStandalone64.ActiveCfg = InEditor|WindowsStandalone64 + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|WSA.ActiveCfg = InEditor|WSA + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|WSA.Build.0 = InEditor|WSA {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|Android.ActiveCfg = Player|Android + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|Android.Build.0 = Player|Android {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|iOS.ActiveCfg = Player|iOS + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|iOS.Build.0 = Player|iOS {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|WSA.ActiveCfg = Player|WSA + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|WSA.Build.0 = Player|WSA {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|Android.ActiveCfg = InEditor|Android + {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|Android.Build.0 = InEditor|Android {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|iOS.ActiveCfg = InEditor|iOS + {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|iOS.Build.0 = InEditor|iOS {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 + {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WindowsStandalone64.ActiveCfg = InEditor|WindowsStandalone64 + {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WSA.ActiveCfg = InEditor|WSA + {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WSA.Build.0 = InEditor|WSA {6546D776-5B41-65B4-0850-B3667F981C26}.Player|Android.ActiveCfg = Player|Android {6546D776-5B41-65B4-0850-B3667F981C26}.Player|iOS.ActiveCfg = Player|iOS {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WSA.ActiveCfg = Player|WSA - {1514B06E-65D0-445D-9521-2DA386D8D709}.InEditor|Android.ActiveCfg = InEditor|Android - {1514B06E-65D0-445D-9521-2DA386D8D709}.InEditor|iOS.ActiveCfg = InEditor|iOS - {1514B06E-65D0-445D-9521-2DA386D8D709}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 - {1514B06E-65D0-445D-9521-2DA386D8D709}.InEditor|WindowsStandalone64.ActiveCfg = InEditor|WindowsStandalone64 - {1514B06E-65D0-445D-9521-2DA386D8D709}.InEditor|WSA.ActiveCfg = InEditor|WSA - {1514B06E-65D0-445D-9521-2DA386D8D709}.Player|Android.ActiveCfg = Player|Android - {1514B06E-65D0-445D-9521-2DA386D8D709}.Player|iOS.ActiveCfg = Player|iOS - {1514B06E-65D0-445D-9521-2DA386D8D709}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 - {1514B06E-65D0-445D-9521-2DA386D8D709}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 - {1514B06E-65D0-445D-9521-2DA386D8D709}.Player|WSA.ActiveCfg = Player|WSA - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|Android.Build.0 = InEditor|Android - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|iOS.Build.0 = InEditor|iOS - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WSA.Build.0 = InEditor|WSA - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WSA.Build.0 = Player|WSA - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|Android.Build.0 = InEditor|Android - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|iOS.Build.0 = InEditor|iOS - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|WSA.Build.0 = InEditor|WSA - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|Android.Build.0 = Player|Android - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|iOS.Build.0 = Player|iOS - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|WSA.Build.0 = Player|WSA - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|Android.Build.0 = InEditor|Android - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|iOS.Build.0 = InEditor|iOS - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|WSA.Build.0 = InEditor|WSA - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|Android.Build.0 = InEditor|Android - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|iOS.Build.0 = InEditor|iOS - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|WSA.Build.0 = InEditor|WSA - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|Android.Build.0 = InEditor|Android - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|iOS.Build.0 = InEditor|iOS - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|WSA.Build.0 = InEditor|WSA - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|Android.Build.0 = InEditor|Android - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|iOS.Build.0 = InEditor|iOS - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|WSA.Build.0 = InEditor|WSA - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|Android.Build.0 = Player|Android - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|iOS.Build.0 = Player|iOS - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|WSA.Build.0 = Player|WSA - {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|Android.Build.0 = InEditor|Android - {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|iOS.Build.0 = InEditor|iOS - {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 - {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 - {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WSA.Build.0 = InEditor|WSA - {1514B06E-65D0-445D-9521-2DA386D8D709}.InEditor|Android.Build.0 = InEditor|Android - {1514B06E-65D0-445D-9521-2DA386D8D709}.InEditor|iOS.Build.0 = InEditor|iOS - {1514B06E-65D0-445D-9521-2DA386D8D709}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 - {1514B06E-65D0-445D-9521-2DA386D8D709}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 - {1514B06E-65D0-445D-9521-2DA386D8D709}.InEditor|WSA.Build.0 = InEditor|WSA - {1514B06E-65D0-445D-9521-2DA386D8D709}.Player|Android.Build.0 = Player|Android - {1514B06E-65D0-445D-9521-2DA386D8D709}.Player|iOS.Build.0 = Player|iOS - {1514B06E-65D0-445D-9521-2DA386D8D709}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 - {1514B06E-65D0-445D-9521-2DA386D8D709}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 - {1514B06E-65D0-445D-9521-2DA386D8D709}.Player|WSA.Build.0 = Player|WSA + {7112FE59-7306-41A6-A333-0B609A3F9D7E}.InEditor|Android.ActiveCfg = InEditor|Android + {7112FE59-7306-41A6-A333-0B609A3F9D7E}.InEditor|Android.Build.0 = InEditor|Android + {7112FE59-7306-41A6-A333-0B609A3F9D7E}.InEditor|iOS.ActiveCfg = InEditor|iOS + {7112FE59-7306-41A6-A333-0B609A3F9D7E}.InEditor|iOS.Build.0 = InEditor|iOS + {7112FE59-7306-41A6-A333-0B609A3F9D7E}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 + {7112FE59-7306-41A6-A333-0B609A3F9D7E}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 + {7112FE59-7306-41A6-A333-0B609A3F9D7E}.InEditor|WindowsStandalone64.ActiveCfg = InEditor|WindowsStandalone64 + {7112FE59-7306-41A6-A333-0B609A3F9D7E}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 + {7112FE59-7306-41A6-A333-0B609A3F9D7E}.InEditor|WSA.ActiveCfg = InEditor|WSA + {7112FE59-7306-41A6-A333-0B609A3F9D7E}.InEditor|WSA.Build.0 = InEditor|WSA + {7112FE59-7306-41A6-A333-0B609A3F9D7E}.Player|Android.ActiveCfg = Player|Android + {7112FE59-7306-41A6-A333-0B609A3F9D7E}.Player|Android.Build.0 = Player|Android + {7112FE59-7306-41A6-A333-0B609A3F9D7E}.Player|iOS.ActiveCfg = Player|iOS + {7112FE59-7306-41A6-A333-0B609A3F9D7E}.Player|iOS.Build.0 = Player|iOS + {7112FE59-7306-41A6-A333-0B609A3F9D7E}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 + {7112FE59-7306-41A6-A333-0B609A3F9D7E}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 + {7112FE59-7306-41A6-A333-0B609A3F9D7E}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 + {7112FE59-7306-41A6-A333-0B609A3F9D7E}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 + {7112FE59-7306-41A6-A333-0B609A3F9D7E}.Player|WSA.ActiveCfg = Player|WSA + {7112FE59-7306-41A6-A333-0B609A3F9D7E}.Player|WSA.Build.0 = Player|WSA EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} = {5314AAAA-6836-4451-8EF1-C04998BD3530} - {15A615C7-33AA-2409-09FE-0B28B0D5143C} = {5314AAAA-6836-4451-8EF1-C04998BD3530} - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5} = {5314AAAA-6836-4451-8EF1-C04998BD3530} - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} = {5314AAAA-6836-4451-8EF1-C04998BD3530} - {6546D776-5B41-65B4-0850-B3667F981C26} = {5314AAAA-6836-4451-8EF1-C04998BD3530} - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD} = {EA139682-DA16-401A-B293-617CFCBC45DC} + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} = {2E3DB4F9-6905-4FFD-B18E-E6BB72759D3F} + {15A615C7-33AA-2409-09FE-0B28B0D5143C} = {2E3DB4F9-6905-4FFD-B18E-E6BB72759D3F} + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5} = {2E3DB4F9-6905-4FFD-B18E-E6BB72759D3F} + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} = {2E3DB4F9-6905-4FFD-B18E-E6BB72759D3F} + {6546D776-5B41-65B4-0850-B3667F981C26} = {2E3DB4F9-6905-4FFD-B18E-E6BB72759D3F} + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD} = {F1D962FF-838F-4416-BD0F-BF2D4920EB57} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {89752EEF-6413-4D53-BA9D-DCA0707F134E} EndGlobalSection GlobalSection(SolutionNotes) = postSolution - {5314AAAA-6836-4451-8EF1-C04998BD3530} = msb4u.generated - {EA139682-DA16-401A-B293-617CFCBC45DC} = msb4u.generated + {2E3DB4F9-6905-4FFD-B18E-E6BB72759D3F} = msb4u.generated + {F1D962FF-838F-4416-BD0F-BF2D4920EB57} = msb4u.generated {BB41A40A-FD6B-AD74-0865-83AB52977BDC} = msb4u.generated {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} = msb4u.generated {15A615C7-33AA-2409-09FE-0B28B0D5143C} = msb4u.generated @@ -212,6 +212,6 @@ Global {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD} = msb4u.generated {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} = msb4u.generated {6546D776-5B41-65B4-0850-B3667F981C26} = msb4u.generated - {1514B06E-65D0-445D-9521-2DA386D8D709} = msb4u.generated + {7112FE59-7306-41A6-A333-0B609A3F9D7E} = msb4u.generated EndGlobalSection EndGlobal diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template index 1322c85..49e4db4 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template @@ -21,8 +21,10 @@ Global #CONFIGURATION_PLATFORM_TEMPLATE | = | EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution -#CONFIGURATION_PLATFORM_MAPPING_TEMPLATE {}.|.ActiveCfg = | +#CONFIGURATION_PLATFORM_MAPPING_TEMPLATE_START + {}.|.ActiveCfg = | #CONFIGURATION_PLATFORM_ENABLED_TEMPLATE {}.|.Build.0 = | +#CONFIGURATION_PLATFORM_MAPPING_TEMPLATE_END EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs index 168360f..97f37e7 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs @@ -234,7 +234,7 @@ public void ExportSolution(UnityProjectInfo unityProjectInfo, Guid dependenciesP ITemplatePart folderTemplate = rootTemplatePart.Templates["FOLDER"]; ITemplatePart configPlatformTemplate = rootTemplatePart.Templates["CONFIGURATION_PLATFORM"]; ITemplatePart configPlatformMappingTemplate = rootTemplatePart.Templates["CONFIGURATION_PLATFORM_MAPPING"]; - ITemplatePart configPlatformEnabledTemplate = rootTemplatePart.Templates["CONFIGURATION_PLATFORM_ENABLED"]; + ITemplatePart configPlatformEnabledTemplate = configPlatformMappingTemplate.Templates["CONFIGURATION_PLATFORM_ENABLED"]; ITemplatePart folderNestedProjectsTemplate = rootTemplatePart.Templates["FOLDER_NESTED_PROJECTS"]; ITemplatePart generatedItemEntryTemplate = rootTemplatePart.Templates["GENERATED_ITEM_ENTRY"]; @@ -331,12 +331,12 @@ void ProcessMappings(Guid guid, string configuration, IReadOnlyDictionary Date: Tue, 24 Dec 2019 13:05:34 -0800 Subject: [PATCH 05/18] Ensuring guid stability for some generated items. --- .../Assets/Project.Unity.msb4u.sln | 64 ++++++++--------- .../MSBuild/settings.json | 2 +- .../Scripts/AssemblyDefinitionInfo.cs | 4 +- .../Scripts/Exporters/IProjectExporter.cs | 4 +- .../Exporters/TemplatedProjectExporter.cs | 23 +++--- .../ProjectGenerator/Scripts/MSBuildTools.cs | 72 +++++++++++++++++-- .../Scripts/UnityProjectInfo.cs | 35 ++++++--- 7 files changed, 142 insertions(+), 62 deletions(-) diff --git a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln index 5a7ff1e..7c466ea 100644 --- a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln +++ b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln @@ -20,7 +20,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.TextMeshPro.Editor.ms {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} = {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.msb4u", "Assembly-CSharp.msb4u.csproj", "{7112FE59-7306-41A6-A333-0B609A3F9D7E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.msb4u", "Assembly-CSharp.msb4u.csproj", "{4989D6C6-D8B3-4556-B4A9-06093DED68AD}" ProjectSection(ProjectDependencies) = postProject {6546D776-5B41-65B4-0850-B3667F981C26} = {6546D776-5B41-65B4-0850-B3667F981C26} {15A615C7-33AA-2409-09FE-0B28B0D5143C} = {15A615C7-33AA-2409-09FE-0B28B0D5143C} @@ -33,9 +33,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.msb4u", "As EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dependencies.msb4u", "Dependencies.msb4u.csproj", "{0D77AB82-D4EB-4034-AC54-4CA04D06906C}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Imported Packages", "Imported Packages", "{2E3DB4F9-6905-4FFD-B18E-E6BB72759D3F}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Imported Packages", "Imported Packages", "{F0962E2E-3201-42A4-90A4-4BD07B8D0413}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "External Packages", "External Packages", "{F1D962FF-838F-4416-BD0F-BF2D4920EB57}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "External Packages", "External Packages", "{02CFE9B1-8003-483F-802B-F2ACC2E2C82B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -167,44 +167,44 @@ Global {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WSA.ActiveCfg = Player|WSA - {7112FE59-7306-41A6-A333-0B609A3F9D7E}.InEditor|Android.ActiveCfg = InEditor|Android - {7112FE59-7306-41A6-A333-0B609A3F9D7E}.InEditor|Android.Build.0 = InEditor|Android - {7112FE59-7306-41A6-A333-0B609A3F9D7E}.InEditor|iOS.ActiveCfg = InEditor|iOS - {7112FE59-7306-41A6-A333-0B609A3F9D7E}.InEditor|iOS.Build.0 = InEditor|iOS - {7112FE59-7306-41A6-A333-0B609A3F9D7E}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 - {7112FE59-7306-41A6-A333-0B609A3F9D7E}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 - {7112FE59-7306-41A6-A333-0B609A3F9D7E}.InEditor|WindowsStandalone64.ActiveCfg = InEditor|WindowsStandalone64 - {7112FE59-7306-41A6-A333-0B609A3F9D7E}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 - {7112FE59-7306-41A6-A333-0B609A3F9D7E}.InEditor|WSA.ActiveCfg = InEditor|WSA - {7112FE59-7306-41A6-A333-0B609A3F9D7E}.InEditor|WSA.Build.0 = InEditor|WSA - {7112FE59-7306-41A6-A333-0B609A3F9D7E}.Player|Android.ActiveCfg = Player|Android - {7112FE59-7306-41A6-A333-0B609A3F9D7E}.Player|Android.Build.0 = Player|Android - {7112FE59-7306-41A6-A333-0B609A3F9D7E}.Player|iOS.ActiveCfg = Player|iOS - {7112FE59-7306-41A6-A333-0B609A3F9D7E}.Player|iOS.Build.0 = Player|iOS - {7112FE59-7306-41A6-A333-0B609A3F9D7E}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 - {7112FE59-7306-41A6-A333-0B609A3F9D7E}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 - {7112FE59-7306-41A6-A333-0B609A3F9D7E}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 - {7112FE59-7306-41A6-A333-0B609A3F9D7E}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 - {7112FE59-7306-41A6-A333-0B609A3F9D7E}.Player|WSA.ActiveCfg = Player|WSA - {7112FE59-7306-41A6-A333-0B609A3F9D7E}.Player|WSA.Build.0 = Player|WSA + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|Android.ActiveCfg = InEditor|Android + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|Android.Build.0 = InEditor|Android + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|iOS.ActiveCfg = InEditor|iOS + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|iOS.Build.0 = InEditor|iOS + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|WindowsStandalone64.ActiveCfg = InEditor|WindowsStandalone64 + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|WSA.ActiveCfg = InEditor|WSA + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|WSA.Build.0 = InEditor|WSA + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|Android.ActiveCfg = Player|Android + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|Android.Build.0 = Player|Android + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|iOS.ActiveCfg = Player|iOS + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|iOS.Build.0 = Player|iOS + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|WSA.ActiveCfg = Player|WSA + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|WSA.Build.0 = Player|WSA EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} = {2E3DB4F9-6905-4FFD-B18E-E6BB72759D3F} - {15A615C7-33AA-2409-09FE-0B28B0D5143C} = {2E3DB4F9-6905-4FFD-B18E-E6BB72759D3F} - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5} = {2E3DB4F9-6905-4FFD-B18E-E6BB72759D3F} - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} = {2E3DB4F9-6905-4FFD-B18E-E6BB72759D3F} - {6546D776-5B41-65B4-0850-B3667F981C26} = {2E3DB4F9-6905-4FFD-B18E-E6BB72759D3F} - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD} = {F1D962FF-838F-4416-BD0F-BF2D4920EB57} + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} = {F0962E2E-3201-42A4-90A4-4BD07B8D0413} + {15A615C7-33AA-2409-09FE-0B28B0D5143C} = {F0962E2E-3201-42A4-90A4-4BD07B8D0413} + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5} = {F0962E2E-3201-42A4-90A4-4BD07B8D0413} + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} = {F0962E2E-3201-42A4-90A4-4BD07B8D0413} + {6546D776-5B41-65B4-0850-B3667F981C26} = {F0962E2E-3201-42A4-90A4-4BD07B8D0413} + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD} = {02CFE9B1-8003-483F-802B-F2ACC2E2C82B} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {89752EEF-6413-4D53-BA9D-DCA0707F134E} EndGlobalSection GlobalSection(SolutionNotes) = postSolution - {2E3DB4F9-6905-4FFD-B18E-E6BB72759D3F} = msb4u.generated - {F1D962FF-838F-4416-BD0F-BF2D4920EB57} = msb4u.generated + {F0962E2E-3201-42A4-90A4-4BD07B8D0413} = msb4u.generated + {02CFE9B1-8003-483F-802B-F2ACC2E2C82B} = msb4u.generated {BB41A40A-FD6B-AD74-0865-83AB52977BDC} = msb4u.generated {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} = msb4u.generated {15A615C7-33AA-2409-09FE-0B28B0D5143C} = msb4u.generated @@ -212,6 +212,6 @@ Global {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD} = msb4u.generated {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} = msb4u.generated {6546D776-5B41-65B4-0850-B3667F981C26} = msb4u.generated - {7112FE59-7306-41A6-A333-0B609A3F9D7E} = msb4u.generated + {4989D6C6-D8B3-4556-B4A9-06093DED68AD} = msb4u.generated EndGlobalSection EndGlobal diff --git a/Samples/IntegratedDependencies.Unity/MSBuild/settings.json b/Samples/IntegratedDependencies.Unity/MSBuild/settings.json index 9c418da..3cb07fe 100644 --- a/Samples/IntegratedDependencies.Unity/MSBuild/settings.json +++ b/Samples/IntegratedDependencies.Unity/MSBuild/settings.json @@ -1 +1 @@ -{"version":1,"autoGenerateEnabled":true,"dependenciesProjectGuid":"0d77ab82-d4eb-4034-ac54-4ca04d06906c"} \ No newline at end of file +{"version":2,"autoGenerateEnabled":true,"dependenciesProjectGuid":"0d77ab82-d4eb-4034-ac54-4ca04d06906c","assemblyCSharpGuid":"4989d6c6-d8b3-4556-b4a9-06093ded68ad","assemblyCSharpEditorGuid":"0cd3f705-4fb4-4a60-8d09-89dc9f0b38a2","assemblyCSharpFirstPassGuid":"5c2fd87a-9877-4af1-ace8-1eed615617c0","assemblyCSharpFirstPassEditorGuid":"eea5290c-d0ca-4efa-b53c-69b3606c8bf2","builtInPackagesFolderGuid":"f78b56e6-cdfd-4bf5-9c51-6a8989cb7c6d","importedPackagesFolderGuid":"f0962e2e-3201-42a4-90a4-4bd07b8d0413","externalPackagesFolderGuid":"02cfe9b1-8003-483f-802b-f2acc2e2c82b"} \ No newline at end of file diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/AssemblyDefinitionInfo.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/AssemblyDefinitionInfo.cs index ca43ffb..149e10c 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/AssemblyDefinitionInfo.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/AssemblyDefinitionInfo.cs @@ -24,9 +24,9 @@ public class AssemblyDefinitionInfo /// /// The Unity assembly reference. /// A new instance. - public static AssemblyDefinitionInfo GetDefaultAssemblyCSharpInfo(Assembly assembly) + public static AssemblyDefinitionInfo GetDefaultAssemblyCSharpInfo(Assembly assembly, Guid guid) { - AssemblyDefinitionInfo toReturn = new AssemblyDefinitionInfo() { IsDefaultAssembly = true, Guid = Guid.NewGuid(), Directory = new DirectoryInfo(Utilities.AssetPath) }; + AssemblyDefinitionInfo toReturn = new AssemblyDefinitionInfo() { IsDefaultAssembly = true, Guid = guid, Directory = new DirectoryInfo(Utilities.AssetPath) }; toReturn.assembly = assembly; toReturn.name = assembly.name; toReturn.references = assembly.assemblyReferences.Select(t => t.name).ToArray(); diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/IProjectExporter.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/IProjectExporter.cs index 2bd32b3..619438d 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/IProjectExporter.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/IProjectExporter.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. #if UNITY_EDITOR -using System; using System.IO; namespace Microsoft.Build.Unity.ProjectGeneration.Exporters @@ -37,7 +36,8 @@ public interface IProjectExporter /// Exports the MSBuild solution given the information. /// /// This contains parsed data about the current Unity project. - void ExportSolution(UnityProjectInfo unityProjectInfo, Guid dependenciesProjectGuid); + /// Configuration for MSBuild tools. + void ExportSolution(UnityProjectInfo unityProjectInfo, MSBuildToolsConfig config); /// /// Generates the Directory.Build.props file that is expected to be used by both generated and non-generated projects alike. diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs index 97f37e7..63f0927 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs @@ -218,7 +218,7 @@ public void GenerateDirectoryPropsFile(UnityProjectInfo unityProjectInfo) } /// - public void ExportSolution(UnityProjectInfo unityProjectInfo, Guid dependenciesProjectGuid) + public void ExportSolution(UnityProjectInfo unityProjectInfo, MSBuildToolsConfig config) { string solutionFilePath = GetSolutionFilePath(unityProjectInfo); @@ -293,11 +293,11 @@ public void ExportSolution(UnityProjectInfo unityProjectInfo, Guid dependenciesP HashSet generatedItems = new HashSet(); // Add the "Dependencies" project - ProcessProjectEntry("Dependencies.msb4u", solutionFilePath, GetProjectFilePath(Utilities.AssetPath, "Dependencies"), dependenciesProjectGuid, null, projectTemplate, projectTemplate.CreateReplacementSet(rootReplacementSet)); + ProcessProjectEntry("Dependencies.msb4u", solutionFilePath, GetProjectFilePath(Utilities.AssetPath, "Dependencies"), config.DependenciesProjectGuid, null, projectTemplate, projectTemplate.CreateReplacementSet(rootReplacementSet)); - PopulateFolder(folderTemplate, folderNestedProjectsTemplate, rootReplacementSet, "Built In Packages", builtinPackages, generatedItems); - PopulateFolder(folderTemplate, folderNestedProjectsTemplate, rootReplacementSet, "Imported Packages", importedPacakges, generatedItems); - PopulateFolder(folderTemplate, folderNestedProjectsTemplate, rootReplacementSet, "External Packages", externalPackages, generatedItems); + PopulateFolder(folderTemplate, folderNestedProjectsTemplate, rootReplacementSet, config.BuiltInPackagesFolderGuid, "Built In Packages", builtinPackages, generatedItems); + PopulateFolder(folderTemplate, folderNestedProjectsTemplate, rootReplacementSet, config.ImportedPackagesFolderGuid, "Imported Packages", importedPacakges, generatedItems); + PopulateFolder(folderTemplate, folderNestedProjectsTemplate, rootReplacementSet, config.ExternalPackagesFolderGuid, "External Packages", externalPackages, generatedItems); ITemplateToken configPlatform_ConfigurationToken = configPlatformTemplate.Tokens["CONFIGURATION"]; ITemplateToken configPlatform_PlatformToken = configPlatformTemplate.Tokens["PLATFORM"]; @@ -351,7 +351,7 @@ void ProcessMappings(Guid guid, string configuration, IReadOnlyDictionary projects, HashSet generatedItems) + private void PopulateFolder(ITemplatePart folderTemplate, ITemplatePart folderNestedProjectsTemplate, TemplateReplacementSet parentReplacementSet, Guid folderGuid, string folderName, List projects, HashSet generatedItems) { if (projects.Count > 0) { - Guid guid = Guid.NewGuid(); - generatedItems.Add(guid); - string folderGuid = guid.ToString().ToUpper(); + generatedItems.Add(folderGuid); + string guidStr = folderGuid.ToString().ToUpper(); TemplateReplacementSet replacementSet = folderTemplate.CreateReplacementSet(parentReplacementSet); folderTemplate.Tokens["FOLDER_NAME"].AssignValue(replacementSet, folderName); - folderTemplate.Tokens["FOLDER_GUID"].AssignValue(replacementSet, folderGuid); + folderTemplate.Tokens["FOLDER_GUID"].AssignValue(replacementSet, guidStr); foreach (CSProjectInfo project in projects) { replacementSet = folderNestedProjectsTemplate.CreateReplacementSet(parentReplacementSet); - folderNestedProjectsTemplate.Tokens["FOLDER_GUID"].AssignValue(replacementSet, folderGuid); + folderNestedProjectsTemplate.Tokens["FOLDER_GUID"].AssignValue(replacementSet, guidStr); folderNestedProjectsTemplate.Tokens["CHILD_GUID"].AssignValue(replacementSet, project.Guid.ToString().ToUpper()); } } diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/MSBuildTools.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/MSBuildTools.cs index db66001..e0dac2f 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/MSBuildTools.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/MSBuildTools.cs @@ -17,7 +17,7 @@ namespace Microsoft.Build.Unity.ProjectGeneration { public class MSBuildToolsConfig { - private const int CurrentConfigVersion = 1; + private const int CurrentConfigVersion = 2; private static string MSBuildSettingsFilePath { get; } = Path.Combine(Utilities.ProjectPath, "MSBuild", "settings.json"); @@ -30,6 +30,27 @@ public class MSBuildToolsConfig [SerializeField] private string dependenciesProjectGuid = Guid.NewGuid().ToString(); + [SerializeField] + private string assemblyCSharpGuid = Guid.NewGuid().ToString(); + + [SerializeField] + private string assemblyCSharpEditorGuid = Guid.NewGuid().ToString(); + + [SerializeField] + private string assemblyCSharpFirstPassGuid = Guid.NewGuid().ToString(); + + [SerializeField] + private string assemblyCSharpFirstPassEditorGuid = Guid.NewGuid().ToString(); + + [SerializeField] + private string builtInPackagesFolderGuid = Guid.NewGuid().ToString(); + + [SerializeField] + private string importedPackagesFolderGuid = Guid.NewGuid().ToString(); + + [SerializeField] + private string externalPackagesFolderGuid = Guid.NewGuid().ToString(); + public bool AutoGenerateEnabled { get => autoGenerateEnabled; @@ -40,7 +61,21 @@ public bool AutoGenerateEnabled } } - public string DependenciesProjectGuid => dependenciesProjectGuid; + internal Guid DependenciesProjectGuid { get; private set; } + + internal Guid AssemblyCSharpGuid { get; private set; } + + internal Guid AssemblyCSharpEditorGuid { get; private set; } + + internal Guid AssemblyCSharpFirstPassGuid { get; private set; } + + internal Guid AssemblyCSharpFirstPassEditorGuid { get; private set; } + + internal Guid BuiltInPackagesFolderGuid { get; private set; } + + internal Guid ImportedPackagesFolderGuid { get; private set; } + + internal Guid ExternalPackagesFolderGuid { get; private set; } private void Save() { @@ -56,14 +91,43 @@ public static MSBuildToolsConfig Load() EditorJsonUtility.FromJsonOverwrite(File.ReadAllText(MSBuildSettingsFilePath), toReturn); } + bool needToSave = false; + + toReturn.DependenciesProjectGuid = EnsureGuid(ref toReturn.dependenciesProjectGuid, ref needToSave); + + toReturn.AssemblyCSharpGuid = EnsureGuid(ref toReturn.assemblyCSharpGuid, ref needToSave); + toReturn.AssemblyCSharpEditorGuid = EnsureGuid(ref toReturn.assemblyCSharpEditorGuid, ref needToSave); + toReturn.AssemblyCSharpFirstPassGuid = EnsureGuid(ref toReturn.assemblyCSharpFirstPassGuid, ref needToSave); + toReturn.AssemblyCSharpFirstPassEditorGuid = EnsureGuid(ref toReturn.assemblyCSharpFirstPassEditorGuid, ref needToSave); + + toReturn.BuiltInPackagesFolderGuid = EnsureGuid(ref toReturn.builtInPackagesFolderGuid, ref needToSave); + toReturn.ImportedPackagesFolderGuid = EnsureGuid(ref toReturn.importedPackagesFolderGuid, ref needToSave); + toReturn.ExternalPackagesFolderGuid = EnsureGuid(ref toReturn.externalPackagesFolderGuid, ref needToSave); + if (CurrentConfigVersion > toReturn.version) { toReturn.version = CurrentConfigVersion; + needToSave = true; + } + + if (needToSave) + { toReturn.Save(); } return toReturn; } + + private static Guid EnsureGuid(ref string field, ref bool needToSave) + { + if (!Guid.TryParse(field, out Guid guid)) + { + guid = Guid.NewGuid(); + field = guid.ToString(); + } + + return guid; + } } /// @@ -106,7 +170,7 @@ public void OnActiveBuildTargetChanged(BuildTarget previousTarget, BuildTarget n private static UnityProjectInfo unityProjectInfo; - public static UnityProjectInfo UnityProjectInfo => unityProjectInfo ?? (unityProjectInfo = new UnityProjectInfo(supportedBuildTargets)); + public static UnityProjectInfo UnityProjectInfo => unityProjectInfo ?? (unityProjectInfo = new UnityProjectInfo(supportedBuildTargets, Config)); private static IProjectExporter exporter = null; @@ -284,7 +348,7 @@ private static void RegenerateEverything(bool reparseUnityData) propsFileGenerationEnd = stopwatch.ElapsedMilliseconds; solutionExportStart = stopwatch.ElapsedMilliseconds; - Exporter.ExportSolution(UnityProjectInfo, Guid.Parse(Config.DependenciesProjectGuid)); + Exporter.ExportSolution(UnityProjectInfo, Config); solutionExportEnd = stopwatch.ElapsedMilliseconds; foreach (string otherFile in TemplateFiles.Instance.OtherFiles) diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/UnityProjectInfo.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/UnityProjectInfo.cs index d852e07..f228563 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/UnityProjectInfo.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/UnityProjectInfo.cs @@ -56,10 +56,10 @@ public class UnityProjectInfo : IDisposable /// public IReadOnlyCollection Plugins { get; private set; } - public UnityProjectInfo(HashSet supportedBuildTargets) + public UnityProjectInfo(HashSet supportedBuildTargets, MSBuildToolsConfig config) { AvailablePlatforms = new ReadOnlyCollection(CompilationPipeline.GetAssemblyDefinitionPlatforms() - .Where(t=> Utilities.IsPlatformInstalled(t.BuildTarget)) + .Where(t => Utilities.IsPlatformInstalled(t.BuildTarget)) .Where(t => supportedBuildTargets.Contains(t.BuildTarget)) .Select(CompilationPlatformInfo.GetCompilationPlatform) .OrderBy(t => t.Name).ToList()); @@ -74,7 +74,7 @@ public UnityProjectInfo(HashSet supportedBuildTargets) } RefreshPlugins(); - RefreshProjects(); + RefreshProjects(config); CurrentPlayerPlatform = AvailablePlatforms.First(t => t.BuildTarget == EditorUserBuildSettings.activeBuildTarget); } @@ -96,16 +96,14 @@ public void RefreshPlugins() // Debug.Log($"Native plugin {plugin.ReferencePath.AbsolutePath} not yet supported for MSBuild project."); } } - - RefreshProjects(); } - public void RefreshProjects() + public void RefreshProjects(MSBuildToolsConfig config) { - CSProjects = new ReadOnlyDictionary(CreateUnityProjects()); + CSProjects = new ReadOnlyDictionary(CreateUnityProjects(config)); } - private Dictionary CreateUnityProjects() + private Dictionary CreateUnityProjects(MSBuildToolsConfig config) { // Not all of these will be converted to C# objects, only the ones found to be referenced Dictionary asmDefInfoMap = new Dictionary(); @@ -156,7 +154,26 @@ private Dictionary CreateUnityProjects() throw new InvalidOperationException($"Failed to retrieve AsmDef for script assembly: {pair.Key}"); } - assemblyDefinitionInfo = AssemblyDefinitionInfo.GetDefaultAssemblyCSharpInfo(pair.Value); + Guid guid; + switch (pair.Key) + { + case "Assembly-CSharp": + guid = config.AssemblyCSharpGuid; + break; + case "Assembly-CSharp-firstpass": + guid = config.AssemblyCSharpFirstPassGuid; + break; + case "Assembly-CSharp-Editor": + guid = config.AssemblyCSharpEditorGuid; + break; + case "Assembly-CSharp-Editor-firstpass": + guid = config.AssemblyCSharpFirstPassEditorGuid; + break; + default: + throw new InvalidOperationException($"Predefined assembly '{assemblyDefinitionInfo.Name}' was not recognized, this generally means it should be added to the switch statement in CSProjectInfo:GetProjectType. Treating is as a PredefinedAssembly instead of PredefinedEditorAssembly."); + } + + assemblyDefinitionInfo = AssemblyDefinitionInfo.GetDefaultAssemblyCSharpInfo(pair.Value, guid); projectsToProcess.Enqueue(pair.Key); } else From dc334b5889d3119efbc242da6294ba2c9fa466bf Mon Sep 17 00:00:00 2001 From: Andrei Borodin Date: Tue, 24 Dec 2019 13:12:31 -0800 Subject: [PATCH 06/18] More minor modifications. --- .../Assets/Project.Unity.msb4u.sln | 11 +++++------ .../SolutionTemplate.sln.template | 3 +-- .../Exporters/TemplatedProjectExporter.cs | 19 +++++++++++-------- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln index 7c466ea..aced772 100644 --- a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln +++ b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln @@ -1,8 +1,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 +# Visual Studio 15, This file is generated by MSBuildForUnity, but can be checked-in and modified. It will get updated when the assembly definitions change, merging in the modifications. VisualStudioVersion = 15.0.28307.539 MinimumVisualStudioVersion = 10.0.40219.1 -# This file is generated by MSBuildForUnity, it will get updated when the assembly definitions change. Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Component.WSA.msb4u", "WSASpecific\Component.WSA.msb4u.csproj", "{BB41A40A-FD6B-AD74-0865-83AB52977BDC}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.TextMeshPro.msb4u", "..\MSBuild\Projects\Unity.TextMeshPro.msb4u.csproj", "{6055BE8E-BEFD-69E4-8B49-212B09B47B2F}" @@ -40,14 +39,14 @@ EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution InEditor|Android = InEditor|Android - Player|Android = Player|Android InEditor|iOS = InEditor|iOS - Player|iOS = Player|iOS InEditor|WindowsStandalone32 = InEditor|WindowsStandalone32 - Player|WindowsStandalone32 = Player|WindowsStandalone32 InEditor|WindowsStandalone64 = InEditor|WindowsStandalone64 - Player|WindowsStandalone64 = Player|WindowsStandalone64 InEditor|WSA = InEditor|WSA + Player|Android = Player|Android + Player|iOS = Player|iOS + Player|WindowsStandalone32 = Player|WindowsStandalone32 + Player|WindowsStandalone64 = Player|WindowsStandalone64 Player|WSA = Player|WSA EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template index 49e4db4..f7718be 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template @@ -1,8 +1,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 +# Visual Studio 15, This file is generated by MSBuildForUnity, but can be checked-in and modified. It will get updated when the assembly definitions change, merging in the modifications. VisualStudioVersion = 15.0.28307.539 MinimumVisualStudioVersion = 10.0.40219.1 -# This file is generated by MSBuildForUnity, it will get updated when the assembly definitions change. #PROJECT_TEMPLATE_START Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "", "", "{}" #PROJECT_SECTION_TEMPLATE_START diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs index 63f0927..b4d096b 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs @@ -301,17 +301,20 @@ public void ExportSolution(UnityProjectInfo unityProjectInfo, MSBuildToolsConfig ITemplateToken configPlatform_ConfigurationToken = configPlatformTemplate.Tokens["CONFIGURATION"]; ITemplateToken configPlatform_PlatformToken = configPlatformTemplate.Tokens["PLATFORM"]; - foreach (CompilationPlatformInfo platform in unityProjectInfo.AvailablePlatforms) - { - TemplateReplacementSet replacementSet = configPlatformTemplate.CreateReplacementSet(rootReplacementSet); - configPlatform_ConfigurationToken.AssignValue(replacementSet, "InEditor"); - configPlatform_PlatformToken.AssignValue(replacementSet, platform.Name); - replacementSet = configPlatformTemplate.CreateReplacementSet(rootReplacementSet); - configPlatform_ConfigurationToken.AssignValue(replacementSet, "Player"); - configPlatform_PlatformToken.AssignValue(replacementSet, platform.Name); + void WriteConfigurationPlatform(string configValue) + { + foreach (CompilationPlatformInfo platform in unityProjectInfo.AvailablePlatforms) + { + TemplateReplacementSet replacementSet = configPlatformTemplate.CreateReplacementSet(rootReplacementSet); + configPlatform_ConfigurationToken.AssignValue(replacementSet, configValue); + configPlatform_PlatformToken.AssignValue(replacementSet, platform.Name); + } } + WriteConfigurationPlatform("InEditor"); + WriteConfigurationPlatform("Player"); + List disabled = new List(); foreach (CSProjectInfo project in orderedProjects.Select(t => t)) From 32760616d922787c41764e13746d51d0bb05b0cb Mon Sep 17 00:00:00 2001 From: Andrei Borodin Date: Tue, 24 Dec 2019 13:25:46 -0800 Subject: [PATCH 07/18] Add dependencies default mapping. --- .../Assets/Project.Unity.msb4u.sln | 24 +++++++++- .../SolutionTemplate.sln.template | 3 +- .../Exporters/TemplatedProjectExporter.cs | 48 ++++++++++--------- 3 files changed, 51 insertions(+), 24 deletions(-) diff --git a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln index aced772..4ed9f57 100644 --- a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln +++ b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln @@ -1,5 +1,5 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15, This file is generated by MSBuildForUnity, but can be checked-in and modified. It will get updated when the assembly definitions change, merging in the modifications. +# Visual Studio 15 VisualStudioVersion = 15.0.28307.539 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Component.WSA.msb4u", "WSASpecific\Component.WSA.msb4u.csproj", "{BB41A40A-FD6B-AD74-0865-83AB52977BDC}" @@ -186,6 +186,26 @@ Global {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|WSA.ActiveCfg = Player|WSA {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|WSA.Build.0 = Player|WSA + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|Android.ActiveCfg = InEditor|Android + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|Android.Build.0 = InEditor|Android + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|iOS.ActiveCfg = InEditor|iOS + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|iOS.Build.0 = InEditor|iOS + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WindowsStandalone64.ActiveCfg = InEditor|WindowsStandalone64 + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WSA.ActiveCfg = InEditor|WSA + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WSA.Build.0 = InEditor|WSA + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|Android.ActiveCfg = Player|Android + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|Android.Build.0 = Player|Android + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|iOS.ActiveCfg = Player|iOS + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|iOS.Build.0 = Player|iOS + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WSA.ActiveCfg = Player|WSA + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WSA.Build.0 = Player|WSA EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -202,6 +222,7 @@ Global SolutionGuid = {89752EEF-6413-4D53-BA9D-DCA0707F134E} EndGlobalSection GlobalSection(SolutionNotes) = postSolution + #This file is generated by MSBuildForUnity, but can be checked-in and modified. It will get updated when the assembly definitions change, merging in the modifications. {F0962E2E-3201-42A4-90A4-4BD07B8D0413} = msb4u.generated {02CFE9B1-8003-483F-802B-F2ACC2E2C82B} = msb4u.generated {BB41A40A-FD6B-AD74-0865-83AB52977BDC} = msb4u.generated @@ -212,5 +233,6 @@ Global {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} = msb4u.generated {6546D776-5B41-65B4-0850-B3667F981C26} = msb4u.generated {4989D6C6-D8B3-4556-B4A9-06093DED68AD} = msb4u.generated + {0D77AB82-D4EB-4034-AC54-4CA04D06906C} = msb4u.generated EndGlobalSection EndGlobal diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template index f7718be..74ed16e 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template @@ -1,5 +1,5 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15, This file is generated by MSBuildForUnity, but can be checked-in and modified. It will get updated when the assembly definitions change, merging in the modifications. +# Visual Studio 15 VisualStudioVersion = 15.0.28307.539 MinimumVisualStudioVersion = 10.0.40219.1 #PROJECT_TEMPLATE_START @@ -35,6 +35,7 @@ Global SolutionGuid = {89752EEF-6413-4D53-BA9D-DCA0707F134E} EndGlobalSection GlobalSection(SolutionNotes) = postSolution + #This file is generated by MSBuildForUnity, but can be checked-in and modified. It will get updated when the assembly definitions change, merging in the modifications. #GENERATED_ITEM_ENTRY_TEMPLATE {} = msb4u.generated EndGlobalSection EndGlobal diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs index b4d096b..5a99ed3 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs @@ -317,38 +317,42 @@ void WriteConfigurationPlatform(string configValue) List disabled = new List(); - foreach (CSProjectInfo project in orderedProjects.Select(t => t)) + void ConfigurationTemplateReplace(ITemplatePart templatePart, TemplateReplacementSet replacementSet, Guid guid, string configuration, string platform) { - void ConfigurationTemplateReplace(ITemplatePart templatePart, TemplateReplacementSet replacementSet, Guid guid, string configuration, string platform) - { - generatedItems.Add(guid); + generatedItems.Add(guid); - templatePart.Tokens["PROJECT_GUID"].AssignValue(replacementSet, guid.ToString().ToUpper()); - templatePart.Tokens["PROJECT_CONFIGURATION"].AssignValue(replacementSet, configuration); - templatePart.Tokens["PROJECT_PLATFORM"].AssignValue(replacementSet, platform); - templatePart.Tokens["SOLUTION_CONFIGURATION"].AssignValue(replacementSet, configuration); - templatePart.Tokens["SOLUTION_PLATFORM"].AssignValue(replacementSet, platform); - } + templatePart.Tokens["PROJECT_GUID"].AssignValue(replacementSet, guid.ToString().ToUpper()); + templatePart.Tokens["PROJECT_CONFIGURATION"].AssignValue(replacementSet, configuration); + templatePart.Tokens["PROJECT_PLATFORM"].AssignValue(replacementSet, platform); + templatePart.Tokens["SOLUTION_CONFIGURATION"].AssignValue(replacementSet, configuration); + templatePart.Tokens["SOLUTION_PLATFORM"].AssignValue(replacementSet, platform); + } - void ProcessMappings(Guid guid, string configuration, IReadOnlyDictionary platforms) + void ProcessMappings(Guid guid, string configuration, Func isEnabledConfigFunc) + { + foreach (CompilationPlatformInfo platform in unityProjectInfo.AvailablePlatforms) { - foreach (CompilationPlatformInfo platform in unityProjectInfo.AvailablePlatforms) + TemplateReplacementSet configMappingReplacementSet = configPlatformMappingTemplate.CreateReplacementSet(rootReplacementSet); + ConfigurationTemplateReplace(configPlatformMappingTemplate, configMappingReplacementSet, guid, configuration, platform.Name); + + if (isEnabledConfigFunc(platform.BuildTarget)) { - TemplateReplacementSet configMappingReplacementSet = configPlatformMappingTemplate.CreateReplacementSet(rootReplacementSet); - ConfigurationTemplateReplace(configPlatformMappingTemplate, configMappingReplacementSet, guid, configuration, platform.Name); - - if (platforms.ContainsKey(platform.BuildTarget)) - { - TemplateReplacementSet replacemetSet = configPlatformEnabledTemplate.CreateReplacementSet(configMappingReplacementSet); - ConfigurationTemplateReplace(configPlatformEnabledTemplate, replacemetSet, guid, configuration, platform.Name); - } + TemplateReplacementSet replacemetSet = configPlatformEnabledTemplate.CreateReplacementSet(configMappingReplacementSet); + ConfigurationTemplateReplace(configPlatformEnabledTemplate, replacemetSet, guid, configuration, platform.Name); } } + } - ProcessMappings(project.Guid, "InEditor", project.InEditorPlatforms); - ProcessMappings(project.Guid, "Player", project.PlayerPlatforms); + foreach (CSProjectInfo project in orderedProjects.Select(t => t)) + { + ProcessMappings(project.Guid, "InEditor", b => project.InEditorPlatforms.ContainsKey(b)); + ProcessMappings(project.Guid, "Player", b => project.PlayerPlatforms.ContainsKey(b)); } + // For dependencies project all mappings exist and are enabled + ProcessMappings(config.DependenciesProjectGuid, "InEditor", b => true); + ProcessMappings(config.DependenciesProjectGuid, "Player", b => true); + foreach (CSProjectInfo project in unityProjectInfo.CSProjects.Values) { ExportProject(unityProjectInfo, project); From 73060bd7f48ac3ff5e289df2e1b81b3ea76895c8 Mon Sep 17 00:00:00 2001 From: Andrei Borodin Date: Tue, 24 Dec 2019 13:33:46 -0800 Subject: [PATCH 08/18] Another tweak to dependencies proj mapping. --- .../Assets/Project.Unity.msb4u.sln | 42 +++++++++---------- .../SolutionTemplate.sln.template | 6 +-- .../Exporters/TemplatedProjectExporter.cs | 22 +++++----- 3 files changed, 35 insertions(+), 35 deletions(-) diff --git a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln index 4ed9f57..586d5c4 100644 --- a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln +++ b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln @@ -186,26 +186,26 @@ Global {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|WSA.ActiveCfg = Player|WSA {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|WSA.Build.0 = Player|WSA - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|Android.ActiveCfg = InEditor|Android - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|Android.Build.0 = InEditor|Android - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|iOS.ActiveCfg = InEditor|iOS - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|iOS.Build.0 = InEditor|iOS - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WindowsStandalone32.Build.0 = InEditor|WindowsStandalone32 - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WindowsStandalone64.ActiveCfg = InEditor|WindowsStandalone64 - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WSA.ActiveCfg = InEditor|WSA - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WSA.Build.0 = InEditor|WSA - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|Android.ActiveCfg = Player|Android - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|Android.Build.0 = Player|Android - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|iOS.ActiveCfg = Player|iOS - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|iOS.Build.0 = Player|iOS - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WSA.ActiveCfg = Player|WSA - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WSA.Build.0 = Player|WSA + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|Android.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|Android.Build.0 = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|iOS.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|iOS.Build.0 = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WindowsStandalone32.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WindowsStandalone32.Build.0 = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WindowsStandalone64.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WindowsStandalone64.Build.0 = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WSA.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WSA.Build.0 = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|Android.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|Android.Build.0 = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|iOS.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|iOS.Build.0 = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WindowsStandalone32.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WindowsStandalone32.Build.0 = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WindowsStandalone64.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WindowsStandalone64.Build.0 = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WSA.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WSA.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -222,7 +222,7 @@ Global SolutionGuid = {89752EEF-6413-4D53-BA9D-DCA0707F134E} EndGlobalSection GlobalSection(SolutionNotes) = postSolution - #This file is generated by MSBuildForUnity, but can be checked-in and modified. It will get updated when the assembly definitions change, merging in the modifications. + # This file is generated by MSBuildForUnity, but can be checked-in and modified. It will get updated when the assembly definitions change, merging in the modifications. {F0962E2E-3201-42A4-90A4-4BD07B8D0413} = msb4u.generated {02CFE9B1-8003-483F-802B-F2ACC2E2C82B} = msb4u.generated {BB41A40A-FD6B-AD74-0865-83AB52977BDC} = msb4u.generated diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template index 74ed16e..251476e 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template @@ -21,8 +21,8 @@ Global EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution #CONFIGURATION_PLATFORM_MAPPING_TEMPLATE_START - {}.|.ActiveCfg = | -#CONFIGURATION_PLATFORM_ENABLED_TEMPLATE {}.|.Build.0 = | + {}.|.ActiveCfg = | +#CONFIGURATION_PLATFORM_ENABLED_TEMPLATE {}.|.Build.0 = | #CONFIGURATION_PLATFORM_MAPPING_TEMPLATE_END EndGlobalSection GlobalSection(SolutionProperties) = preSolution @@ -35,7 +35,7 @@ Global SolutionGuid = {89752EEF-6413-4D53-BA9D-DCA0707F134E} EndGlobalSection GlobalSection(SolutionNotes) = postSolution - #This file is generated by MSBuildForUnity, but can be checked-in and modified. It will get updated when the assembly definitions change, merging in the modifications. + # This file is generated by MSBuildForUnity, but can be checked-in and modified. It will get updated when the assembly definitions change, merging in the modifications. #GENERATED_ITEM_ENTRY_TEMPLATE {} = msb4u.generated EndGlobalSection EndGlobal diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs index 5a99ed3..d34a918 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs @@ -317,28 +317,28 @@ void WriteConfigurationPlatform(string configValue) List disabled = new List(); - void ConfigurationTemplateReplace(ITemplatePart templatePart, TemplateReplacementSet replacementSet, Guid guid, string configuration, string platform) + void ConfigurationTemplateReplace(ITemplatePart templatePart, TemplateReplacementSet replacementSet, Guid guid, string slnConfiguration, string slnPlatform, string projConfiguration, string projPlatform) { generatedItems.Add(guid); templatePart.Tokens["PROJECT_GUID"].AssignValue(replacementSet, guid.ToString().ToUpper()); - templatePart.Tokens["PROJECT_CONFIGURATION"].AssignValue(replacementSet, configuration); - templatePart.Tokens["PROJECT_PLATFORM"].AssignValue(replacementSet, platform); - templatePart.Tokens["SOLUTION_CONFIGURATION"].AssignValue(replacementSet, configuration); - templatePart.Tokens["SOLUTION_PLATFORM"].AssignValue(replacementSet, platform); + templatePart.Tokens["SOLUTION_CONFIGURATION"].AssignValue(replacementSet, slnConfiguration); + templatePart.Tokens["SOLUTION_PLATFORM"].AssignValue(replacementSet, slnPlatform); + templatePart.Tokens["PROJECT_CONFIGURATION"].AssignValue(replacementSet, projConfiguration); + templatePart.Tokens["PROJECT_PLATFORM"].AssignValue(replacementSet, projPlatform); } - void ProcessMappings(Guid guid, string configuration, Func isEnabledConfigFunc) + void ProcessMappings(Guid guid, string configuration, Func isEnabledConfigFunc, string projConfigOverride = null, string projPlatformOverride = null) { foreach (CompilationPlatformInfo platform in unityProjectInfo.AvailablePlatforms) { TemplateReplacementSet configMappingReplacementSet = configPlatformMappingTemplate.CreateReplacementSet(rootReplacementSet); - ConfigurationTemplateReplace(configPlatformMappingTemplate, configMappingReplacementSet, guid, configuration, platform.Name); + ConfigurationTemplateReplace(configPlatformMappingTemplate, configMappingReplacementSet, guid, configuration, platform.Name, projConfigOverride ?? configuration, projPlatformOverride ?? platform.Name); if (isEnabledConfigFunc(platform.BuildTarget)) { TemplateReplacementSet replacemetSet = configPlatformEnabledTemplate.CreateReplacementSet(configMappingReplacementSet); - ConfigurationTemplateReplace(configPlatformEnabledTemplate, replacemetSet, guid, configuration, platform.Name); + ConfigurationTemplateReplace(configPlatformEnabledTemplate, replacemetSet, guid, configuration, platform.Name, projConfigOverride ?? configuration, projPlatformOverride ?? platform.Name); } } } @@ -349,9 +349,9 @@ void ProcessMappings(Guid guid, string configuration, Func is ProcessMappings(project.Guid, "Player", b => project.PlayerPlatforms.ContainsKey(b)); } - // For dependencies project all mappings exist and are enabled - ProcessMappings(config.DependenciesProjectGuid, "InEditor", b => true); - ProcessMappings(config.DependenciesProjectGuid, "Player", b => true); + // For dependencies project all mappings exist and are enabled but mapped to Debug|Any CPU by default + ProcessMappings(config.DependenciesProjectGuid, "InEditor", b => true, "Debug", "Any CPU"); + ProcessMappings(config.DependenciesProjectGuid, "Player", b => true, "Debug", "Any CPU"); foreach (CSProjectInfo project in unityProjectInfo.CSProjects.Values) { From 76a32766eebb82839fc384b87949b645aa1d239f Mon Sep 17 00:00:00 2001 From: Andrei Borodin Date: Tue, 24 Dec 2019 13:51:16 -0800 Subject: [PATCH 09/18] Corrected ordering of nested items so that saving solution doesn't update it. --- .../Assets/Project.Unity.msb4u.sln | 3 +- .../SolutionTemplate.sln.template | 1 - .../Exporters/TemplatedProjectExporter.cs | 39 ++++++++----------- 3 files changed, 18 insertions(+), 25 deletions(-) diff --git a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln index 586d5c4..dfb0f1b 100644 --- a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln +++ b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln @@ -214,15 +214,14 @@ Global {6055BE8E-BEFD-69E4-8B49-212B09B47B2F} = {F0962E2E-3201-42A4-90A4-4BD07B8D0413} {15A615C7-33AA-2409-09FE-0B28B0D5143C} = {F0962E2E-3201-42A4-90A4-4BD07B8D0413} {645165C8-1694-74BF-BBEB-8FB0BCFD26F5} = {F0962E2E-3201-42A4-90A4-4BD07B8D0413} + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD} = {02CFE9B1-8003-483F-802B-F2ACC2E2C82B} {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} = {F0962E2E-3201-42A4-90A4-4BD07B8D0413} {6546D776-5B41-65B4-0850-B3667F981C26} = {F0962E2E-3201-42A4-90A4-4BD07B8D0413} - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD} = {02CFE9B1-8003-483F-802B-F2ACC2E2C82B} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {89752EEF-6413-4D53-BA9D-DCA0707F134E} EndGlobalSection GlobalSection(SolutionNotes) = postSolution - # This file is generated by MSBuildForUnity, but can be checked-in and modified. It will get updated when the assembly definitions change, merging in the modifications. {F0962E2E-3201-42A4-90A4-4BD07B8D0413} = msb4u.generated {02CFE9B1-8003-483F-802B-F2ACC2E2C82B} = msb4u.generated {BB41A40A-FD6B-AD74-0865-83AB52977BDC} = msb4u.generated diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template index 251476e..25ddb5c 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template @@ -35,7 +35,6 @@ Global SolutionGuid = {89752EEF-6413-4D53-BA9D-DCA0707F134E} EndGlobalSection GlobalSection(SolutionNotes) = postSolution - # This file is generated by MSBuildForUnity, but can be checked-in and modified. It will get updated when the assembly definitions change, merging in the modifications. #GENERATED_ITEM_ENTRY_TEMPLATE {} = msb4u.generated EndGlobalSection EndGlobal diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs index d34a918..9ffd6ba 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs @@ -267,9 +267,7 @@ public void ExportSolution(UnityProjectInfo unityProjectInfo, MSBuildToolsConfig } } - List builtinPackages = new List(); - List importedPacakges = new List(); - List externalPackages = new List(); + List> folderNestedItems = new List>(); foreach (CSProjectInfo project in orderedProjects) { TemplateReplacementSet replacementSet = projectTemplate.CreateReplacementSet(rootReplacementSet); @@ -278,13 +276,13 @@ public void ExportSolution(UnityProjectInfo unityProjectInfo, MSBuildToolsConfig switch (project.AssemblyDefinitionInfo.AssetLocation) { case AssetLocation.BuiltInPackage: - builtinPackages.Add(project); + folderNestedItems.Add(new Tuple(project, config.BuiltInPackagesFolderGuid, "Built In Packages")); break; case AssetLocation.PackageLibraryCache: - importedPacakges.Add(project); + folderNestedItems.Add(new Tuple(project, config.ImportedPackagesFolderGuid, "Imported Packages")); break; case AssetLocation.External: - externalPackages.Add(project); + folderNestedItems.Add(new Tuple(project, config.ExternalPackagesFolderGuid, "External Packages")); break; default: break; } @@ -295,9 +293,7 @@ public void ExportSolution(UnityProjectInfo unityProjectInfo, MSBuildToolsConfig // Add the "Dependencies" project ProcessProjectEntry("Dependencies.msb4u", solutionFilePath, GetProjectFilePath(Utilities.AssetPath, "Dependencies"), config.DependenciesProjectGuid, null, projectTemplate, projectTemplate.CreateReplacementSet(rootReplacementSet)); - PopulateFolder(folderTemplate, folderNestedProjectsTemplate, rootReplacementSet, config.BuiltInPackagesFolderGuid, "Built In Packages", builtinPackages, generatedItems); - PopulateFolder(folderTemplate, folderNestedProjectsTemplate, rootReplacementSet, config.ImportedPackagesFolderGuid, "Imported Packages", importedPacakges, generatedItems); - PopulateFolder(folderTemplate, folderNestedProjectsTemplate, rootReplacementSet, config.ExternalPackagesFolderGuid, "External Packages", externalPackages, generatedItems); + PopulateFolders(folderTemplate, folderNestedProjectsTemplate, rootReplacementSet, folderNestedItems, generatedItems); ITemplateToken configPlatform_ConfigurationToken = configPlatformTemplate.Tokens["CONFIGURATION"]; ITemplateToken configPlatform_PlatformToken = configPlatformTemplate.Tokens["PLATFORM"]; @@ -408,23 +404,22 @@ private void GenerateTopLevelDependenciesProject(UnityProjectInfo unityProjectIn } } - private void PopulateFolder(ITemplatePart folderTemplate, ITemplatePart folderNestedProjectsTemplate, TemplateReplacementSet parentReplacementSet, Guid folderGuid, string folderName, List projects, HashSet generatedItems) + private void PopulateFolders(ITemplatePart folderTemplate, ITemplatePart folderNestedProjectsTemplate, TemplateReplacementSet parentReplacementSet, List> folderNestedItems, HashSet generatedItems) { - if (projects.Count > 0) + foreach (Tuple tuple in folderNestedItems) { - generatedItems.Add(folderGuid); - string guidStr = folderGuid.ToString().ToUpper(); - - TemplateReplacementSet replacementSet = folderTemplate.CreateReplacementSet(parentReplacementSet); - folderTemplate.Tokens["FOLDER_NAME"].AssignValue(replacementSet, folderName); - folderTemplate.Tokens["FOLDER_GUID"].AssignValue(replacementSet, guidStr); - - foreach (CSProjectInfo project in projects) + string guidStr = tuple.Item2.ToString().ToUpper(); + if (generatedItems.Add(tuple.Item2)) { - replacementSet = folderNestedProjectsTemplate.CreateReplacementSet(parentReplacementSet); - folderNestedProjectsTemplate.Tokens["FOLDER_GUID"].AssignValue(replacementSet, guidStr); - folderNestedProjectsTemplate.Tokens["CHILD_GUID"].AssignValue(replacementSet, project.Guid.ToString().ToUpper()); + // Folder hasn't been added to generated items, so then add to replacement set + TemplateReplacementSet replacementSet = folderTemplate.CreateReplacementSet(parentReplacementSet); + folderTemplate.Tokens["FOLDER_NAME"].AssignValue(replacementSet, tuple.Item3); + folderTemplate.Tokens["FOLDER_GUID"].AssignValue(replacementSet, guidStr); } + + TemplateReplacementSet nestedReplacementSet = folderNestedProjectsTemplate.CreateReplacementSet(parentReplacementSet); + folderNestedProjectsTemplate.Tokens["FOLDER_GUID"].AssignValue(nestedReplacementSet, guidStr); + folderNestedProjectsTemplate.Tokens["CHILD_GUID"].AssignValue(nestedReplacementSet, tuple.Item1.Guid.ToString().ToUpper()); } } From 2193698c7613cb785ad8c8087c59672a14d0ea7f Mon Sep 17 00:00:00 2001 From: Andrei Borodin Date: Fri, 27 Dec 2019 17:47:12 -0800 Subject: [PATCH 10/18] Completed the work, needs testing. --- .../Assets/Project.Unity.msb4u.sln | 2 +- .../MSBuild/settings.json | 2 +- .../SolutionTemplate.sln.template | 21 +- .../Exporters/TemplatedProjectExporter.cs | 405 ++++++++++++++---- .../Exporters/TextSolutionFileParser.cs | 381 ++++++++++++++++ .../Exporters/TextSolutionFileParser.cs.meta | 11 + .../ProjectGenerator/Scripts/MSBuildTools.cs | 9 +- 7 files changed, 727 insertions(+), 104 deletions(-) create mode 100644 Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TextSolutionFileParser.cs create mode 100644 Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TextSolutionFileParser.cs.meta diff --git a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln index dfb0f1b..d72d681 100644 --- a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln +++ b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln @@ -219,7 +219,7 @@ Global {6546D776-5B41-65B4-0850-B3667F981C26} = {F0962E2E-3201-42A4-90A4-4BD07B8D0413} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {89752EEF-6413-4D53-BA9D-DCA0707F134E} + SolutionGuid = {6E6CC69E-A194-4F01-9182-CE7B0F63F375} EndGlobalSection GlobalSection(SolutionNotes) = postSolution {F0962E2E-3201-42A4-90A4-4BD07B8D0413} = msb4u.generated diff --git a/Samples/IntegratedDependencies.Unity/MSBuild/settings.json b/Samples/IntegratedDependencies.Unity/MSBuild/settings.json index 3cb07fe..80e8845 100644 --- a/Samples/IntegratedDependencies.Unity/MSBuild/settings.json +++ b/Samples/IntegratedDependencies.Unity/MSBuild/settings.json @@ -1 +1 @@ -{"version":2,"autoGenerateEnabled":true,"dependenciesProjectGuid":"0d77ab82-d4eb-4034-ac54-4ca04d06906c","assemblyCSharpGuid":"4989d6c6-d8b3-4556-b4a9-06093ded68ad","assemblyCSharpEditorGuid":"0cd3f705-4fb4-4a60-8d09-89dc9f0b38a2","assemblyCSharpFirstPassGuid":"5c2fd87a-9877-4af1-ace8-1eed615617c0","assemblyCSharpFirstPassEditorGuid":"eea5290c-d0ca-4efa-b53c-69b3606c8bf2","builtInPackagesFolderGuid":"f78b56e6-cdfd-4bf5-9c51-6a8989cb7c6d","importedPackagesFolderGuid":"f0962e2e-3201-42a4-90a4-4bd07b8d0413","externalPackagesFolderGuid":"02cfe9b1-8003-483f-802b-f2acc2e2c82b"} \ No newline at end of file +{"version":3,"autoGenerateEnabled":true,"dependenciesProjectGuid":"0d77ab82-d4eb-4034-ac54-4ca04d06906c","assemblyCSharpGuid":"4989d6c6-d8b3-4556-b4a9-06093ded68ad","assemblyCSharpEditorGuid":"0cd3f705-4fb4-4a60-8d09-89dc9f0b38a2","assemblyCSharpFirstPassGuid":"5c2fd87a-9877-4af1-ace8-1eed615617c0","assemblyCSharpFirstPassEditorGuid":"eea5290c-d0ca-4efa-b53c-69b3606c8bf2","builtInPackagesFolderGuid":"f78b56e6-cdfd-4bf5-9c51-6a8989cb7c6d","importedPackagesFolderGuid":"f0962e2e-3201-42a4-90a4-4bd07b8d0413","externalPackagesFolderGuid":"02cfe9b1-8003-483f-802b-f2acc2e2c82b","solutionGuid":"6e6cc69e-a194-4f01-9182-ce7b0f63f375"} \ No newline at end of file diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template index 25ddb5c..64df863 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template @@ -9,6 +9,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "", "} = {} EndProjectSection #PROJECT_SECTION_TEMPLATE_END +#EXTRA_PROJECT_SECTION_TEMPLATE_START + GlobalSection() = +#EXTRA_SECTION_LINE_TEMPLATE + EndGlobalSection +#EXTRA_PROJECT_SECTION_TEMPLATE_END EndProject #PROJECT_TEMPLATE_END #FOLDER_TEMPLATE_START @@ -20,21 +25,23 @@ Global #CONFIGURATION_PLATFORM_TEMPLATE | = | EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution -#CONFIGURATION_PLATFORM_MAPPING_TEMPLATE_START - {}.|.ActiveCfg = | -#CONFIGURATION_PLATFORM_ENABLED_TEMPLATE {}.|.Build.0 = | -#CONFIGURATION_PLATFORM_MAPPING_TEMPLATE_END +#CONFIGURATION_PLATFORM_PROPERTY_TEMPLATE {}.|. = | EndGlobalSection GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE +#SOLUTION_PROPERTIES_TEMPLATE = EndGlobalSection GlobalSection(NestedProjects) = preSolution #FOLDER_NESTED_PROJECTS_TEMPLATE {} = {} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {89752EEF-6413-4D53-BA9D-DCA0707F134E} +#EXTENSIBILITY_GLOBALS_TEMPLATE = EndGlobalSection GlobalSection(SolutionNotes) = postSolution -#GENERATED_ITEM_ENTRY_TEMPLATE {} = msb4u.generated +#SOLUTION_NOTES_TEMPLATE = + EndGlobalSection +#EXTRA_GLOBAL_SECTION_TEMPLATE_START + GlobalSection() = +#EXTRA_SECTION_LINE_TEMPLATE EndGlobalSection +#EXTRA_GLOBAL_SECTION_TEMPLATE_END EndGlobal diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs index 9ffd6ba..5770c4c 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs @@ -18,6 +18,12 @@ namespace Microsoft.Build.Unity.ProjectGeneration.Exporters public class TemplatedProjectExporter : IProjectExporter { private const string MSBuildFileSuffix = "msb4u"; + private static readonly Guid FolderProjectTypeGuid = Guid.Parse("2150E333-8FDC-42A3-9474-1A3956D46DE8"); + + private readonly Dictionary solutionProperties = new Dictionary() + { + { "HideSolutionNode", "FALSE" } + }; private readonly DirectoryInfo generatedOutputFolder; @@ -222,24 +228,206 @@ public void ExportSolution(UnityProjectInfo unityProjectInfo, MSBuildToolsConfig { string solutionFilePath = GetSolutionFilePath(unityProjectInfo); + SolutionFileInfo solutionFileInfo = null; + + // Parse existing solution if (File.Exists(solutionFilePath)) { - ParseExistingSolutionFile(solutionFilePath); + TextSolutionFileParser.TryParseExistingSolutionFile(solutionFilePath, out solutionFileInfo); + File.Delete(solutionFilePath); } + ITemplatePart rootTemplatePart = solutionFileTemplate.Root; TemplateReplacementSet rootReplacementSet = rootTemplatePart.CreateReplacementSet(); - ITemplatePart projectTemplate = rootTemplatePart.Templates["PROJECT"]; - ITemplatePart folderTemplate = rootTemplatePart.Templates["FOLDER"]; + // Remove known folders & projects + if (solutionFileInfo != null) + { + solutionFileInfo.Projects.Remove(config.BuiltInPackagesFolderGuid); + solutionFileInfo.Projects.Remove(config.ImportedPackagesFolderGuid); + solutionFileInfo.Projects.Remove(config.ExternalPackagesFolderGuid); + } + + List> folderNestedItems = new List>(); + List orderedProjects = new List(); + + ProcessProjects(unityProjectInfo, config, solutionFileInfo, solutionFilePath, rootTemplatePart, rootReplacementSet, folderNestedItems, orderedProjects); + + HashSet generatedItems = new HashSet(); + + ProcessSolutionFolders(rootTemplatePart, rootReplacementSet, folderNestedItems, generatedItems, solutionFileInfo); + + // Process Solution file configurations + ProcessSolutionConfigurationPlatform(unityProjectInfo, rootTemplatePart, rootReplacementSet, solutionFileInfo); + + // Process Configurations Mappings + ProcessConfigPlatformMappings(unityProjectInfo, config, rootTemplatePart, rootReplacementSet, orderedProjects, generatedItems, solutionFileInfo); + + // Write Solution Properties + ITemplatePart solutionPropertiesTemplate = rootTemplatePart.Templates["SOLUTION_PROPERTIES"]; + ProcessPropertiesSet(solutionPropertiesTemplate, rootReplacementSet, solutionProperties, solutionFileInfo?.Properties); + + // Write Extensibility Globals + Dictionary extensibilityGlobals = new Dictionary() { { "SolutionGuid", "{" + config.SolutionGuid.ToString().ToUpper() + "}" } }; + ITemplatePart extensibilityGlobalsTemplate = rootTemplatePart.Templates["EXTENSIBILITY_GLOBALS"]; + ProcessPropertiesSet(extensibilityGlobalsTemplate, rootReplacementSet, extensibilityGlobals, solutionFileInfo?.ExtensibilityGlobals); + + // Write Solution Notes + ITemplatePart solutuonNotesTemplate = rootTemplatePart.Templates["SOLUTION_NOTES"]; + Dictionary generatedDictionary = generatedItems.ToDictionary(t => "{" + t.ToString().ToUpper() + "}", t => "msb4u.generated"); + ProcessPropertiesSet(solutuonNotesTemplate, rootReplacementSet, generatedDictionary, solutionFileInfo?.SolutionNotes); + + // Write Extra Sections found in the read Solution + ProcessExtraSolutionSections(rootTemplatePart, rootReplacementSet, solutionFileInfo); + + // Export projects + foreach (CSProjectInfo project in unityProjectInfo.CSProjects.Values) + { + ExportProject(unityProjectInfo, project); + } + + GenerateTopLevelDependenciesProject(unityProjectInfo, config.DependenciesProjectGuid); + + solutionFileTemplate.Write(solutionFilePath, rootReplacementSet); + } + + private void ProcessExtraSolutionSections(ITemplatePart rootTemplatePart, TemplateReplacementSet rootReplacementSet, SolutionFileInfo solutionFileInfo) + { + if (solutionFileInfo != null) + { + ITemplatePart extraSectionTemplate = rootTemplatePart.Templates["EXTRA_GLOBAL_SECTION"]; + + foreach (SolutionFileSection section in solutionFileInfo.SolutionSections.Values) + { + ProcessExtraSection(extraSectionTemplate, rootReplacementSet, section.Name, section.Type == SolutionGlobalSectionType.PreSolution ? "preSolution" : "postSolution", section.Lines); + } + } + } + + private void ProcessConfigPlatformMappings(UnityProjectInfo unityProjectInfo, MSBuildToolsConfig config, ITemplatePart rootTemplatePart, TemplateReplacementSet rootReplacementSet, List orderedProjects, HashSet generatedItems, SolutionFileInfo solutionFileInfo) + { + ITemplatePart configPlatformPropertyTemplate = rootTemplatePart.Templates["CONFIGURATION_PLATFORM_PROPERTY"]; + foreach (CSProjectInfo project in orderedProjects.Select(t => t)) + { + generatedItems.Add(project.Guid); + ProcessMappings(unityProjectInfo, configPlatformPropertyTemplate, rootReplacementSet, project.Guid, "InEditor", b => project.InEditorPlatforms.ContainsKey(b)); + ProcessMappings(unityProjectInfo, configPlatformPropertyTemplate, rootReplacementSet, project.Guid, "Player", b => project.PlayerPlatforms.ContainsKey(b)); + } + + generatedItems.Add(config.DependenciesProjectGuid); + // For dependencies project all mappings exist and are enabled but mapped to Debug|Any CPU by default + ProcessMappings(unityProjectInfo, configPlatformPropertyTemplate, rootReplacementSet, config.DependenciesProjectGuid, "InEditor", b => true, "Debug", "Any CPU"); + ProcessMappings(unityProjectInfo, configPlatformPropertyTemplate, rootReplacementSet, config.DependenciesProjectGuid, "Player", b => true, "Debug", "Any CPU"); + + if (solutionFileInfo != null) + { + foreach (ProjectConfigurationEntry item in solutionFileInfo.ProjectConfigurationEntires) + { + if (solutionFileInfo.Projects.ContainsKey(item.ProjectGuid)) + { + TemplateReplacementSet configMappingReplacementSet = configPlatformPropertyTemplate.CreateReplacementSet(rootReplacementSet); + ConfigurationTemplateReplace(configPlatformPropertyTemplate, configMappingReplacementSet, item.ProjectGuid, item.SolutionConfiguration, item.SolutionPlatform, item.Property, item.ProjectConfiguration, item.ProjectPlatform); + } + } + } + } + + private void ProcessPropertiesSet(ITemplatePart solutionPropertiesTemplate, TemplateReplacementSet rootReplacementSet, Dictionary propertySet, Dictionary existingPropertySet) + { + void WriteSolutionProperty(string key, string value) + { + TemplateReplacementSet replacementSet = solutionPropertiesTemplate.CreateReplacementSet(rootReplacementSet); + solutionPropertiesTemplate.Tokens["PROPERTY_KEY"].AssignValue(replacementSet, key); + solutionPropertiesTemplate.Tokens["PROPERTY_VALUE"].AssignValue(replacementSet, value); + } + + foreach (KeyValuePair prop in propertySet) + { + WriteSolutionProperty(prop.Key, prop.Value); + } + + if (existingPropertySet != null) + { + foreach (KeyValuePair prop in existingPropertySet) + { + if (!propertySet.ContainsKey(prop.Key)) + { + WriteSolutionProperty(prop.Key, prop.Value); + } + } + } + } + + private void ProcessSolutionConfigurationPlatform(UnityProjectInfo unityProjectInfo, ITemplatePart rootTemplatePart, TemplateReplacementSet rootReplacementSet, SolutionFileInfo solutionFileInfo) + { ITemplatePart configPlatformTemplate = rootTemplatePart.Templates["CONFIGURATION_PLATFORM"]; - ITemplatePart configPlatformMappingTemplate = rootTemplatePart.Templates["CONFIGURATION_PLATFORM_MAPPING"]; - ITemplatePart configPlatformEnabledTemplate = configPlatformMappingTemplate.Templates["CONFIGURATION_PLATFORM_ENABLED"]; - ITemplatePart folderNestedProjectsTemplate = rootTemplatePart.Templates["FOLDER_NESTED_PROJECTS"]; - ITemplatePart generatedItemEntryTemplate = rootTemplatePart.Templates["GENERATED_ITEM_ENTRY"]; + + ITemplateToken configPlatform_ConfigurationToken = configPlatformTemplate.Tokens["CONFIGURATION"]; + ITemplateToken configPlatform_PlatformToken = configPlatformTemplate.Tokens["PLATFORM"]; + + void WriteConfigPlatformMapping(string configValue, string platformValue) + { + TemplateReplacementSet replacementSet = configPlatformTemplate.CreateReplacementSet(rootReplacementSet); + configPlatform_ConfigurationToken.AssignValue(replacementSet, configValue); + configPlatform_PlatformToken.AssignValue(replacementSet, platformValue); + } + + void WriteConfigurationPlatform(string configValue) + { + foreach (CompilationPlatformInfo platform in unityProjectInfo.AvailablePlatforms) + { + if (solutionFileInfo != null) + { + solutionFileInfo.ConfigPlatformPairs.RemoveWhere(t => Equals(t.Configuration, configValue) && Equals(t.Platform, platform.Name)); + } + + WriteConfigPlatformMapping(configValue, platform.Name); + } + } + + WriteConfigurationPlatform("InEditor"); + WriteConfigurationPlatform("Player"); + + if (solutionFileInfo != null) + { + foreach (ConfigPlatformPair item in solutionFileInfo.ConfigPlatformPairs) + { + WriteConfigPlatformMapping(item.Configuration, item.Platform); + } + } + } + + private void ConfigurationTemplateReplace(ITemplatePart templatePart, TemplateReplacementSet replacementSet, Guid guid, string slnConfiguration, string slnPlatform, string property, string projConfiguration, string projPlatform) + { + templatePart.Tokens["PROJECT_GUID"].AssignValue(replacementSet, guid.ToString().ToUpper()); + templatePart.Tokens["SOLUTION_CONFIGURATION"].AssignValue(replacementSet, slnConfiguration); + templatePart.Tokens["SOLUTION_PLATFORM"].AssignValue(replacementSet, slnPlatform); + templatePart.Tokens["PROPERTY"].AssignValue(replacementSet, property); + templatePart.Tokens["PROJECT_CONFIGURATION"].AssignValue(replacementSet, projConfiguration); + templatePart.Tokens["PROJECT_PLATFORM"].AssignValue(replacementSet, projPlatform); + } + + private void ProcessMappings(UnityProjectInfo unityProjectInfo, ITemplatePart configPlatformPropertyTemplate, TemplateReplacementSet rootReplacementSet, Guid guid, string configuration, Func isEnabledConfigFunc, string projConfigOverride = null, string projPlatformOverride = null) + { + foreach (CompilationPlatformInfo platform in unityProjectInfo.AvailablePlatforms) + { + TemplateReplacementSet configMappingReplacementSet = configPlatformPropertyTemplate.CreateReplacementSet(rootReplacementSet); + ConfigurationTemplateReplace(configPlatformPropertyTemplate, configMappingReplacementSet, guid, configuration, platform.Name, "ActiveCfg", projConfigOverride ?? configuration, projPlatformOverride ?? platform.Name); + + if (isEnabledConfigFunc(platform.BuildTarget)) + { + TemplateReplacementSet replacemetSet = configPlatformPropertyTemplate.CreateReplacementSet(rootReplacementSet); + ConfigurationTemplateReplace(configPlatformPropertyTemplate, replacemetSet, guid, configuration, platform.Name, "Build.0", projConfigOverride ?? configuration, projPlatformOverride ?? platform.Name); + } + } + } + + private void ProcessProjects(UnityProjectInfo unityProjectInfo, MSBuildToolsConfig config, SolutionFileInfo solutionFileInfo, string solutionFilePath, ITemplatePart rootTemplatePart, TemplateReplacementSet rootReplacementSet, List> folderNestedItems, List orderedProjects) + { + ITemplatePart projectTemplate = rootTemplatePart.Templates["PROJECT"]; CSProjectInfo[] unorderedProjects = unityProjectInfo.CSProjects.Select(t => t.Value).ToArray(); - List orderedProjects = new List(); while (orderedProjects.Count < unorderedProjects.Length) { @@ -267,11 +455,20 @@ public void ExportSolution(UnityProjectInfo unityProjectInfo, MSBuildToolsConfig } } - List> folderNestedItems = new List>(); foreach (CSProjectInfo project in orderedProjects) { + IEnumerable> extraSections = null; + if (solutionFileInfo != null) + { + if (solutionFileInfo.Projects.TryGetValue(project.Guid, out Project existingProject)) + { + solutionFileInfo.Projects.Remove(project.Guid); + extraSections = existingProject.Sections.Values; + } + } + TemplateReplacementSet replacementSet = projectTemplate.CreateReplacementSet(rootReplacementSet); - ProcessProjectEntry(project.Name + ".msb4u", solutionFilePath, GetProjectPath(project).FullName, project.Guid, project.ProjectDependencies, projectTemplate, replacementSet); + ProcessProjectEntry(project.Name + ".msb4u", Utilities.GetRelativePath(Path.GetDirectoryName(solutionFilePath), GetProjectPath(project).FullName), project.Guid, project.ProjectDependencies.Select(t => t.Dependency.Guid).ToList(), projectTemplate, replacementSet, extraSections); switch (project.AssemblyDefinitionInfo.AssetLocation) { @@ -288,87 +485,40 @@ public void ExportSolution(UnityProjectInfo unityProjectInfo, MSBuildToolsConfig } } - HashSet generatedItems = new HashSet(); - // Add the "Dependencies" project - ProcessProjectEntry("Dependencies.msb4u", solutionFilePath, GetProjectFilePath(Utilities.AssetPath, "Dependencies"), config.DependenciesProjectGuid, null, projectTemplate, projectTemplate.CreateReplacementSet(rootReplacementSet)); - - PopulateFolders(folderTemplate, folderNestedProjectsTemplate, rootReplacementSet, folderNestedItems, generatedItems); - - ITemplateToken configPlatform_ConfigurationToken = configPlatformTemplate.Tokens["CONFIGURATION"]; - ITemplateToken configPlatform_PlatformToken = configPlatformTemplate.Tokens["PLATFORM"]; - - void WriteConfigurationPlatform(string configValue) { - foreach (CompilationPlatformInfo platform in unityProjectInfo.AvailablePlatforms) + string dependencyRelativePath = Utilities.GetRelativePath(Path.GetDirectoryName(solutionFilePath), GetProjectFilePath(Utilities.AssetPath, "Dependencies")); + IEnumerable> extraSections = null; + + if (solutionFileInfo != null) { - TemplateReplacementSet replacementSet = configPlatformTemplate.CreateReplacementSet(rootReplacementSet); - configPlatform_ConfigurationToken.AssignValue(replacementSet, configValue); - configPlatform_PlatformToken.AssignValue(replacementSet, platform.Name); + if (solutionFileInfo.Projects.TryGetValue(config.DependenciesProjectGuid, out Project existingProject)) + { + solutionFileInfo.Projects.Remove(config.DependenciesProjectGuid); + extraSections = existingProject.Sections.Values; + } } + ProcessProjectEntry("Dependencies.msb4u", dependencyRelativePath, config.DependenciesProjectGuid, null, projectTemplate, projectTemplate.CreateReplacementSet(rootReplacementSet), extraSections); } - WriteConfigurationPlatform("InEditor"); - WriteConfigurationPlatform("Player"); - - List disabled = new List(); - - void ConfigurationTemplateReplace(ITemplatePart templatePart, TemplateReplacementSet replacementSet, Guid guid, string slnConfiguration, string slnPlatform, string projConfiguration, string projPlatform) + if (solutionFileInfo != null) { - generatedItems.Add(guid); - - templatePart.Tokens["PROJECT_GUID"].AssignValue(replacementSet, guid.ToString().ToUpper()); - templatePart.Tokens["SOLUTION_CONFIGURATION"].AssignValue(replacementSet, slnConfiguration); - templatePart.Tokens["SOLUTION_PLATFORM"].AssignValue(replacementSet, slnPlatform); - templatePart.Tokens["PROJECT_CONFIGURATION"].AssignValue(replacementSet, projConfiguration); - templatePart.Tokens["PROJECT_PLATFORM"].AssignValue(replacementSet, projPlatform); - } - - void ProcessMappings(Guid guid, string configuration, Func isEnabledConfigFunc, string projConfigOverride = null, string projPlatformOverride = null) - { - foreach (CompilationPlatformInfo platform in unityProjectInfo.AvailablePlatforms) + foreach (Guid guid in solutionFileInfo.MSB4UGeneratedItems) { - TemplateReplacementSet configMappingReplacementSet = configPlatformMappingTemplate.CreateReplacementSet(rootReplacementSet); - ConfigurationTemplateReplace(configPlatformMappingTemplate, configMappingReplacementSet, guid, configuration, platform.Name, projConfigOverride ?? configuration, projPlatformOverride ?? platform.Name); + solutionFileInfo.Projects.Remove(guid); + } - if (isEnabledConfigFunc(platform.BuildTarget)) + // Process existing projects + foreach (Project project in solutionFileInfo.Projects.Values) + { + // Don't process folders or what we previously thought were generated projects + if (project.TypeGuid != FolderProjectTypeGuid) { - TemplateReplacementSet replacemetSet = configPlatformEnabledTemplate.CreateReplacementSet(configMappingReplacementSet); - ConfigurationTemplateReplace(configPlatformEnabledTemplate, replacemetSet, guid, configuration, platform.Name, projConfigOverride ?? configuration, projPlatformOverride ?? platform.Name); + TemplateReplacementSet replacementSet = projectTemplate.CreateReplacementSet(rootReplacementSet); + ProcessProjectEntry(project.Name, project.RelativePath, project.Guid, project.Dependencies, projectTemplate, replacementSet, project.Sections.Values); } } } - - foreach (CSProjectInfo project in orderedProjects.Select(t => t)) - { - ProcessMappings(project.Guid, "InEditor", b => project.InEditorPlatforms.ContainsKey(b)); - ProcessMappings(project.Guid, "Player", b => project.PlayerPlatforms.ContainsKey(b)); - } - - // For dependencies project all mappings exist and are enabled but mapped to Debug|Any CPU by default - ProcessMappings(config.DependenciesProjectGuid, "InEditor", b => true, "Debug", "Any CPU"); - ProcessMappings(config.DependenciesProjectGuid, "Player", b => true, "Debug", "Any CPU"); - - foreach (CSProjectInfo project in unityProjectInfo.CSProjects.Values) - { - ExportProject(unityProjectInfo, project); - } - - GenerateTopLevelDependenciesProject(unityProjectInfo, config.DependenciesProjectGuid); - - // Write notes for generated items - foreach (Guid item in generatedItems) - { - TemplateReplacementSet replacementSet = generatedItemEntryTemplate.CreateReplacementSet(rootReplacementSet); - generatedItemEntryTemplate.Tokens["ITEM_GUID"].AssignValue(replacementSet, item.ToString().ToUpper()); - } - - solutionFileTemplate.Write(solutionFilePath, rootReplacementSet); - } - - private void ParseExistingSolutionFile(string path) - { - } private void GenerateTopLevelDependenciesProject(UnityProjectInfo unityProjectInfo, Guid dependenciesProjectGuid) @@ -404,22 +554,64 @@ private void GenerateTopLevelDependenciesProject(UnityProjectInfo unityProjectIn } } - private void PopulateFolders(ITemplatePart folderTemplate, ITemplatePart folderNestedProjectsTemplate, TemplateReplacementSet parentReplacementSet, List> folderNestedItems, HashSet generatedItems) + private void ProcessSolutionFolders(ITemplatePart rootTemplatePart, TemplateReplacementSet parentReplacementSet, List> folderNestedItems, HashSet generatedItems, SolutionFileInfo solutionFileInfo) { + ITemplatePart folderTemplate = rootTemplatePart.Templates["FOLDER"]; + ITemplatePart folderNestedProjectsTemplate = rootTemplatePart.Templates["FOLDER_NESTED_PROJECTS"]; + + void AddFolder(string name, string guid) + { + TemplateReplacementSet replacementSet = folderTemplate.CreateReplacementSet(parentReplacementSet); + folderTemplate.Tokens["FOLDER_NAME"].AssignValue(replacementSet, name); + folderTemplate.Tokens["FOLDER_GUID"].AssignValue(replacementSet, guid); + } + + void AddNestedMapping(string parentGuid, string childGuid) + { + TemplateReplacementSet nestedReplacementSet = folderNestedProjectsTemplate.CreateReplacementSet(parentReplacementSet); + folderNestedProjectsTemplate.Tokens["FOLDER_GUID"].AssignValue(nestedReplacementSet, parentGuid); + folderNestedProjectsTemplate.Tokens["CHILD_GUID"].AssignValue(nestedReplacementSet, childGuid); + } + + HashSet addedFolders = new HashSet(); + foreach (Tuple tuple in folderNestedItems) { string guidStr = tuple.Item2.ToString().ToUpper(); - if (generatedItems.Add(tuple.Item2)) + + generatedItems.Add(tuple.Item2); + + if (addedFolders.Add(guidStr)) { - // Folder hasn't been added to generated items, so then add to replacement set - TemplateReplacementSet replacementSet = folderTemplate.CreateReplacementSet(parentReplacementSet); - folderTemplate.Tokens["FOLDER_NAME"].AssignValue(replacementSet, tuple.Item3); - folderTemplate.Tokens["FOLDER_GUID"].AssignValue(replacementSet, guidStr); + AddFolder(tuple.Item3, guidStr); } - TemplateReplacementSet nestedReplacementSet = folderNestedProjectsTemplate.CreateReplacementSet(parentReplacementSet); - folderNestedProjectsTemplate.Tokens["FOLDER_GUID"].AssignValue(nestedReplacementSet, guidStr); - folderNestedProjectsTemplate.Tokens["CHILD_GUID"].AssignValue(nestedReplacementSet, tuple.Item1.Guid.ToString().ToUpper()); + Guid childGuid = tuple.Item1.Guid; + AddNestedMapping(guidStr, childGuid.ToString().ToUpper()); + if (solutionFileInfo != null) + { + solutionFileInfo.ChildToParentNestedMappings.Remove(childGuid); + } + } + + if (solutionFileInfo != null) + { + foreach (Project project in solutionFileInfo.Projects.Values) + { + if (project.TypeGuid == FolderProjectTypeGuid) + { + string guidString = project.Guid.ToString().ToUpper(); + if (addedFolders.Add(guidString)) + { + AddFolder(project.Name, guidString); + } + } + } + + foreach (KeyValuePair mapping in solutionFileInfo.ChildToParentNestedMappings) + { + AddNestedMapping(mapping.Value.ToString().ToUpper(), mapping.Key.ToString().ToUpper()); + } } } @@ -488,24 +680,49 @@ private List GetPlatformConditions(IReadOnlyDictionary> projectDependencies, ITemplatePart templatePart, TemplateReplacementSet replacementSet) + private void ProcessProjectEntry(string projectName, string projectRelativePath, Guid projectGuid, IReadOnlyCollection projectDependencies, ITemplatePart templatePart, TemplateReplacementSet projectReplacementSet, IEnumerable> extraSections = null) { - templatePart.Tokens["PROJECT_NAME"].AssignValue(replacementSet, projectName); - templatePart.Tokens["PROJECT_RELATIVE_PATH"].AssignValue(replacementSet, Utilities.GetRelativePath(Path.GetDirectoryName(solutionPath), projectPath)); - templatePart.Tokens["PROJECT_GUID"].AssignValue(replacementSet, projectGuid.ToString().ToUpper()); + templatePart.Tokens["PROJECT_NAME"].AssignValue(projectReplacementSet, projectName); + templatePart.Tokens["PROJECT_RELATIVE_PATH"].AssignValue(projectReplacementSet, projectRelativePath); + templatePart.Tokens["PROJECT_GUID"].AssignValue(projectReplacementSet, projectGuid.ToString().ToUpper()); ITemplatePart projectSectionTemplate = templatePart.Templates["PROJECT_SECTION"]; ITemplatePart dependencyTemplate = projectSectionTemplate.Templates["PROJECT_DEPENDENCY"]; if (projectDependencies != null && projectDependencies.Count > 0) { - TemplateReplacementSet projectSectionReplacementSet = projectSectionTemplate.CreateReplacementSet(replacementSet); - foreach (CSProjectDependency project in projectDependencies) + TemplateReplacementSet projectSectionReplacementSet = projectSectionTemplate.CreateReplacementSet(projectReplacementSet); + foreach (Guid dependencyGuid in projectDependencies) { TemplateReplacementSet set = dependencyTemplate.CreateReplacementSet(projectSectionReplacementSet); - dependencyTemplate.Tokens["DEPENDENCY_GUID"].AssignValue(set, project.Dependency.Guid.ToString().ToUpper()); + dependencyTemplate.Tokens["DEPENDENCY_GUID"].AssignValue(set, dependencyGuid.ToString().ToUpper()); } } + + ITemplatePart extraProjectSectionTemplate = templatePart.Templates["EXTRA_PROJECT_SECTION"]; + + if (extraSections != null) + { + foreach (SolutionFileSection section in extraSections) + { + ProcessExtraSection(extraProjectSectionTemplate, projectReplacementSet, section.Name, section.Type == SolutionProjecSectionType.PreProject ? "preProject" : "postProject", section.Lines); + } + } + } + + private void ProcessExtraSection(ITemplatePart extraSectionTemplate, TemplateReplacementSet parentReplacementSet, string sectionName, string sectionType, IEnumerable sectionLines) + { + ITemplatePart extraSectionLineTemplate = extraSectionTemplate.Templates["EXTRA_SECTION_LINE"]; + + TemplateReplacementSet sectionReplacementSet = extraSectionTemplate.CreateReplacementSet(parentReplacementSet); + extraSectionTemplate.Tokens["SECTION_NAME"].AssignValue(sectionReplacementSet, sectionName); + extraSectionTemplate.Tokens["PRE_POST_SOLUTION"].AssignValue(sectionReplacementSet, sectionType); + + foreach (string line in sectionLines) + { + TemplateReplacementSet lineReplacementSet = extraSectionLineTemplate.CreateReplacementSet(sectionReplacementSet); + extraSectionLineTemplate.Tokens["SECTION_LINE"].AssignValue(lineReplacementSet, line); + } } public void ExportPlatformPropsFile(CompilationPlatformInfo platform, bool inEditorConfiguration) diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TextSolutionFileParser.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TextSolutionFileParser.cs new file mode 100644 index 0000000..dc7f19f --- /dev/null +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TextSolutionFileParser.cs @@ -0,0 +1,381 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +#if UNITY_EDITOR + +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.RegularExpressions; + +namespace Microsoft.Build.Unity.ProjectGeneration.Exporters +{ + internal enum SolutionProjecSectionType + { + PreProject, + PostProject + } + + internal enum SolutionGlobalSectionType + { + PreSolution, + PostSolution + } + + internal class SolutionFileInfo + { + public Dictionary Projects { get; set; } + + public Dictionary> SolutionSections { get; set; } + + public Dictionary ChildToParentNestedMappings { get; set; } + + public HashSet ConfigPlatformPairs { get; set; } + + public Dictionary Properties { get; set; } + + public Dictionary ExtensibilityGlobals { get; set; } + + public Dictionary SolutionNotes { get; set; } + + public List ProjectConfigurationEntires { get; set; } + + public HashSet MSB4UGeneratedItems { get; set; } + } + + internal struct ConfigPlatformPair + { + public string Configuration { get; set; } + + public string Platform { get; set; } + + public ConfigPlatformPair(string configuration, string platform) + { + Configuration = configuration; + Platform = platform; + } + + public override bool Equals(object obj) + { + return obj is ConfigPlatformPair other && Equals(Configuration, other.Configuration) && Equals(Platform, other.Platform); + } + + public override int GetHashCode() + { + return (Configuration?.GetHashCode() ?? 0) ^ (Platform?.GetHashCode() ?? 0); + } + } + + internal struct ProjectConfigurationEntry + { + public Guid ProjectGuid { get; set; } + + public string SolutionConfiguration { get; set; } + + public string SolutionPlatform { get; set; } + + public string Property { get; set; } + + public string ProjectConfiguration { get; set; } + + public string ProjectPlatform { get; set; } + } + + internal struct SolutionFileSection + { + public string Name { get; set; } + + public T Type { get; set; } + + public List Lines { get; set; } + } + + internal struct Project + { + public Guid TypeGuid { get; set; } + + public string Name { get; set; } + + public string RelativePath { get; set; } + + public Guid Guid { get; set; } + + public HashSet Dependencies { get; set; } + + public Dictionary> Sections { get; set; } + } + + internal static class TextSolutionFileParser + { + public static bool TryParseExistingSolutionFile(string path, out SolutionFileInfo solutionFileInfo) + { + try + { + solutionFileInfo = ParseExistingSolutionFile(path); + return true; + } + catch (Exception ex) + { + UnityEngine.Debug.LogError($"Failed to parse existing solution file."); + UnityEngine.Debug.LogException(ex); + + solutionFileInfo = default; + return false; + } + } + + private static SolutionFileInfo ParseExistingSolutionFile(string path) + { + Dictionary projects = new Dictionary(); + Dictionary> globalSections = new Dictionary>(); + HashSet configPlatPairs = new HashSet(); + Dictionary solutionProperties = new Dictionary(); + Dictionary extensibilityGlobals = new Dictionary(); + Dictionary solutionNotes = new Dictionary(); + Dictionary childToParentNestedMapping = new Dictionary(); + List projectConfigurationEntries = new List(); + + HashSet msb4uGeneratedItems = new HashSet(); + + using (StreamReader reader = new StreamReader(path)) + { + string line = string.Empty; + while (!reader.EndOfStream) + { + line = reader.ReadLine(); + if (line.StartsWith("Project")) + { + // Entered Projects section + break; + } + } + + // Read Projects + while (!reader.EndOfStream) + { + if (!line.StartsWith("Project")) + { + throw new InvalidDataException("Unexpected top level section."); + } + + Project project = ParseProjectDefinitionSection(reader, line); + projects.Add(project.Guid, project); + + line = reader.ReadLine() ?? string.Empty; + + if (line.StartsWith("Global") && line.Trim().Length == "Global".Length) + { + // Entered next part of the Global sections + break; + } + } + + // Parse Global Sections + while (!reader.EndOfStream) + { + line = reader.ReadLine().TrimStart(); + + if (line.StartsWith("EndGlobal")) + { + // Done with Global (and file) + break; + } + + // SAMPLE: GlobalSection(SolutionConfigurationPlatforms) = preSolution + string globalSectionHeaderRegex = @"GlobalSection\(([^\)]+)\)\s+=\s+(preSolution|postSolution)"; + Match match = Regex.Match(line, globalSectionHeaderRegex); + + if (!match.Success) + { + throw new InvalidDataException("Expecting Global sections."); + } + string sectionName = match.Groups[1].Captures[0].Value; + string prePostSolution = match.Groups[2].Captures[0].Value; + switch (sectionName) + { + case "SolutionConfigurationPlatforms": + ReadLinesUntil(reader, "EndGlobalSection", l => + { + string[] configPlatPair = l.Split('=')[0].Trim().Split('|'); + configPlatPairs.Add(new ConfigPlatformPair(configPlatPair[0], configPlatPair[1])); + }); + break; + case "ProjectConfigurationPlatforms": + ReadLinesUntil(reader, "EndGlobalSection", l => + { + // SAMPLE: {}.|.ActiveCfg = | + // SAMPLE: {}.|.Build.0 = | + string regex = @"{([^}]+)}\.([^\|]+)\|([^\.]+)([^\s]+)\s+=\s+([^\|]+)\|(.+)"; + Match configMatch = Regex.Match(l, regex); + projectConfigurationEntries.Add(new ProjectConfigurationEntry() + { + ProjectGuid = Guid.Parse(configMatch.Groups[1].Captures[0].Value), + SolutionConfiguration = configMatch.Groups[2].Captures[0].Value, + SolutionPlatform = configMatch.Groups[3].Captures[0].Value, + Property = configMatch.Groups[4].Captures[0].Value, + ProjectConfiguration = configMatch.Groups[5].Captures[0].Value, + ProjectPlatform = configMatch.Groups[6].Captures[0].Value + }); + }); + break; + case "SolutionProperties": + ReadLinesUntil(reader, "EndGlobalSection", l => + { + string[] property = l.Split('='); + solutionProperties[property[0].Trim()] = property[1].Trim(); + }); + break; + case "NestedProjects": + ReadLinesUntil(reader, "EndGlobalSection", l => + { + string[] nestedMapping = l.Split('='); + nestedMapping[0] = nestedMapping[0].Trim(); + nestedMapping[1] = nestedMapping[1].Trim(); + + string childProject = nestedMapping[0].Substring(1, nestedMapping[0].Length - 2); + string parentProject = nestedMapping[1].Substring(1, nestedMapping[1].Length - 2); + + childToParentNestedMapping[Guid.Parse(childProject)] = Guid.Parse(parentProject); + }); + break; + case "ExtensibilityGlobals": + ReadLinesUntil(reader, "EndGlobalSection", l => + { + string[] property = l.Split('='); + extensibilityGlobals[property[0].Trim()] = property[1].Trim(); + }); + break; + case "SolutionNotes": + ReadLinesUntil(reader, "EndGlobalSection", l => + { + string[] property = l.Split('='); + string key = property[0].Trim(); + string value = property[1].Trim(); + + if (value == "msb4u.generated") + { + msb4uGeneratedItems.Add(Guid.Parse(key.Substring(1, key.Length - 2))); + } + else + { + solutionNotes[key] = value; + } + }); + break; + default: + globalSections.Add(sectionName, ReadSection(reader, sectionName, prePostSolution == "preSolution" ? SolutionGlobalSectionType.PreSolution : SolutionGlobalSectionType.PostSolution)); + break; + } + } + } + + return new SolutionFileInfo() + { + Projects = projects, + ChildToParentNestedMappings = childToParentNestedMapping, + ConfigPlatformPairs = configPlatPairs, + ProjectConfigurationEntires = projectConfigurationEntries, + Properties = solutionProperties, + ExtensibilityGlobals = extensibilityGlobals, + SolutionNotes = solutionNotes, + SolutionSections = globalSections, + MSB4UGeneratedItems = msb4uGeneratedItems + }; + } + + private static Project ParseProjectDefinitionSection(StreamReader reader, string line) + { + // Line is currently the "Project" line, so parse the project until EndProject + + //Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "", "", "{}" + string projectLineRegex = "Project\\(\"{" + "([^}]+)" + "}\"\\)\\s*=\\s*\"" + "([^\"]+)" + "\",\\s*\"" + "([^\"]+)" + "\",\\s*\"" + "([^\"]+)" + "\""; + Match match = Regex.Match(line, projectLineRegex); + + if (!match.Success) + { + throw new InvalidDataException("Failed to parse the project line."); + } + + string projectType = match.Groups[1].Captures[0].Value; + string projectName = match.Groups[2].Captures[0].Value; + string projectPath = match.Groups[3].Captures[0].Value; + string projectGuid = match.Groups[4].Captures[0].Value; + + Dictionary> generalProjectSections = new Dictionary>(); + HashSet dependencies = new HashSet(); + do + { + string projectSectionRegex = @"ProjectSection\(([^\)]+)\)\s*=\s*(preProject|postProject)"; + + line = reader.ReadLine().TrimStart(); + if (line.StartsWith("EndProject")) + { + // We reached end of project section, read next line and return + return new Project() + { + Dependencies = dependencies, + Guid = Guid.Parse(projectGuid), + TypeGuid = Guid.Parse(projectType), + Name = projectName, + RelativePath = projectPath, + Sections = generalProjectSections + }; + } + + match = Regex.Match(line, projectSectionRegex); + if (!match.Success) + { + throw new InvalidDataException("Invalid data in the Project, expecting a ProjectSection"); + } + + string projectSectionName = match.Groups[1].Captures[0].Value; + string prePostProject = match.Groups[2].Captures[0].Value; + + if (projectSectionName == "ProjectDependencies") + { + ReadLinesUntil(reader, "EndProjectSection", l => + { + string guid = l.Split('=')[0].Trim(); + dependencies.Add(Guid.Parse(guid.Substring(1, guid.Length - 2))); + }); + } + else + { + generalProjectSections.Add(projectSectionName, ReadSection(reader, projectSectionName, prePostProject == "preProject" ? SolutionProjecSectionType.PreProject : SolutionProjecSectionType.PostProject)); + } + + } while (!reader.EndOfStream); + + throw new InvalidDataException("We should have already returned."); + } + + private static SolutionFileSection ReadSection(StreamReader reader, string sectionName, T sessionType) + { + List sectionLines = new List(); + + ReadLinesUntil(reader, "EndProjectSection", sectionLines.Add); + + return new SolutionFileSection() + { + Lines = sectionLines, + Name = sectionName, + Type = sessionType + }; + } + + private static void ReadLinesUntil(StreamReader reader, string endLine, Action processLineCallback) + { + do + { + string line = reader.ReadLine().Trim(); + if (line == endLine) + { + break; + } + + processLineCallback(line); + } while (!reader.EndOfStream); + } + } +} +#endif \ No newline at end of file diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TextSolutionFileParser.cs.meta b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TextSolutionFileParser.cs.meta new file mode 100644 index 0000000..d8173d0 --- /dev/null +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TextSolutionFileParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f4c32de2ea7230142b09b7e535b33815 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/MSBuildTools.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/MSBuildTools.cs index e0dac2f..ea461f6 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/MSBuildTools.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/MSBuildTools.cs @@ -17,7 +17,7 @@ namespace Microsoft.Build.Unity.ProjectGeneration { public class MSBuildToolsConfig { - private const int CurrentConfigVersion = 2; + private const int CurrentConfigVersion = 3; private static string MSBuildSettingsFilePath { get; } = Path.Combine(Utilities.ProjectPath, "MSBuild", "settings.json"); @@ -51,6 +51,9 @@ public class MSBuildToolsConfig [SerializeField] private string externalPackagesFolderGuid = Guid.NewGuid().ToString(); + [SerializeField] + private string solutionGuid = Guid.NewGuid().ToString(); + public bool AutoGenerateEnabled { get => autoGenerateEnabled; @@ -77,6 +80,8 @@ public bool AutoGenerateEnabled internal Guid ExternalPackagesFolderGuid { get; private set; } + internal Guid SolutionGuid { get; private set; } + private void Save() { File.WriteAllText(MSBuildSettingsFilePath, EditorJsonUtility.ToJson(this)); @@ -104,6 +109,8 @@ public static MSBuildToolsConfig Load() toReturn.ImportedPackagesFolderGuid = EnsureGuid(ref toReturn.importedPackagesFolderGuid, ref needToSave); toReturn.ExternalPackagesFolderGuid = EnsureGuid(ref toReturn.externalPackagesFolderGuid, ref needToSave); + toReturn.SolutionGuid = EnsureGuid(ref toReturn.solutionGuid, ref needToSave); + if (CurrentConfigVersion > toReturn.version) { toReturn.version = CurrentConfigVersion; From 862f05df8392f23e155d2812e62f10cbfe0bbe44 Mon Sep 17 00:00:00 2001 From: Andrei Borodin Date: Tue, 7 Jan 2020 11:31:19 -0800 Subject: [PATCH 11/18] Updating the checked-in solution to contain the external projects. --- .../Assets/Project.Unity.msb4u.sln | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) diff --git a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln index d72d681..6aa19a0 100644 --- a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln +++ b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln @@ -32,10 +32,16 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.msb4u", "As EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dependencies.msb4u", "Dependencies.msb4u.csproj", "{0D77AB82-D4EB-4034-AC54-4CA04D06906C}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommonLibrary", "..\External\CommonLibrary\CommonLibrary.csproj", "{D36DD91A-2347-4BE3-BDAD-E72898C014BA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommonLibrary.WSA", "..\External\CommonLibrary.WSA\CommonLibrary.WSA.csproj", "{06FDDF06-41BA-47F3-863F-E426A80C69A8}" +EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Imported Packages", "Imported Packages", "{F0962E2E-3201-42A4-90A4-4BD07B8D0413}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "External Packages", "External Packages", "{02CFE9B1-8003-483F-802B-F2ACC2E2C82B}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "External", "External", "{9D69A397-2F47-459D-B35F-C5D0C9D588B8}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution InEditor|Android = InEditor|Android @@ -48,6 +54,20 @@ Global Player|WindowsStandalone32 = Player|WindowsStandalone32 Player|WindowsStandalone64 = Player|WindowsStandalone64 Player|WSA = Player|WSA + Debug|Android = Debug|Android + Debug|Any CPU = Debug|Any CPU + Debug|iOS = Debug|iOS + Debug|WindowsStandalone32 = Debug|WindowsStandalone32 + Debug|WindowsStandalone64 = Debug|WindowsStandalone64 + Debug|WSA = Debug|WSA + InEditor|Any CPU = InEditor|Any CPU + Player|Any CPU = Player|Any CPU + Release|Android = Release|Android + Release|Any CPU = Release|Any CPU + Release|iOS = Release|iOS + Release|WindowsStandalone32 = Release|WindowsStandalone32 + Release|WindowsStandalone64 = Release|WindowsStandalone64 + Release|WSA = Release|WSA EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|Android.ActiveCfg = InEditor|Android @@ -206,6 +226,102 @@ Global {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WindowsStandalone64.Build.0 = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WSA.ActiveCfg = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WSA.Build.0 = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Android..ActiveCfg = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Android..Build.0 = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Any CPU..ActiveCfg = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Any CPU..Build.0 = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|iOS..ActiveCfg = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|iOS..Build.0 = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WindowsStandalone32..ActiveCfg = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WindowsStandalone32..Build.0 = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WindowsStandalone64..ActiveCfg = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WindowsStandalone64..Build.0 = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WSA..ActiveCfg = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WSA..Build.0 = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|Android..ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|Android..Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|Any CPU..ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|Any CPU..Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|iOS..ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|iOS..Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WindowsStandalone32..ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WindowsStandalone32..Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WindowsStandalone64..ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WindowsStandalone64..Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WSA..ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WSA..Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|Android..ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|Android..Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|Any CPU..ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|Any CPU..Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|iOS..ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|iOS..Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WindowsStandalone32..ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WindowsStandalone32..Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WindowsStandalone64..ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WindowsStandalone64..Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WSA..ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WSA..Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|Android..ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|Android..Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|Any CPU..ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|Any CPU..Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|iOS..ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|iOS..Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WindowsStandalone32..ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WindowsStandalone32..Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WindowsStandalone64..ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WindowsStandalone64..Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WSA..ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WSA..Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|Android..ActiveCfg = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|Android..Build.0 = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|Any CPU..ActiveCfg = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|Any CPU..Build.0 = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|iOS..ActiveCfg = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|iOS..Build.0 = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WindowsStandalone32..ActiveCfg = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WindowsStandalone32..Build.0 = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WindowsStandalone64..ActiveCfg = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WindowsStandalone64..Build.0 = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WSA..ActiveCfg = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WSA..Build.0 = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|Android..ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|Android..Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|Any CPU..ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|Any CPU..Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|iOS..ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|iOS..Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WindowsStandalone32..ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WindowsStandalone32..Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WindowsStandalone64..ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WindowsStandalone64..Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WSA..ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WSA..Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|Android..ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|Android..Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|Any CPU..ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|Any CPU..Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|iOS..ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|iOS..Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WindowsStandalone32..ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WindowsStandalone32..Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WindowsStandalone64..ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WindowsStandalone64..Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WSA..ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WSA..Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|Android..ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|Android..Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|Any CPU..ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|Any CPU..Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|iOS..ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|iOS..Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WindowsStandalone32..ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WindowsStandalone32..Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WindowsStandalone64..ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WindowsStandalone64..Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WSA..ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WSA..Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -217,6 +333,8 @@ Global {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD} = {02CFE9B1-8003-483F-802B-F2ACC2E2C82B} {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E} = {F0962E2E-3201-42A4-90A4-4BD07B8D0413} {6546D776-5B41-65B4-0850-B3667F981C26} = {F0962E2E-3201-42A4-90A4-4BD07B8D0413} + {D36DD91A-2347-4BE3-BDAD-E72898C014BA} = {9D69A397-2F47-459D-B35F-C5D0C9D588B8} + {06FDDF06-41BA-47F3-863F-E426A80C69A8} = {9D69A397-2F47-459D-B35F-C5D0C9D588B8} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {6E6CC69E-A194-4F01-9182-CE7B0F63F375} From ba5d5cbddd2abea5c5339ef2b0eb36faaeae29b3 Mon Sep 17 00:00:00 2001 From: Andrei Borodin Date: Tue, 7 Jan 2020 11:46:09 -0800 Subject: [PATCH 12/18] Sorted config mappings. --- .../Assets/Project.Unity.msb4u.sln | 16 +++++----- .../Exporters/TemplatedProjectExporter.cs | 32 ++++++++++++------- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln index 6aa19a0..f0b0ff8 100644 --- a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln +++ b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln @@ -44,24 +44,24 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "External", "External", "{9D EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Android = Debug|Android + Debug|Any CPU = Debug|Any CPU + Debug|iOS = Debug|iOS + Debug|WindowsStandalone32 = Debug|WindowsStandalone32 + Debug|WindowsStandalone64 = Debug|WindowsStandalone64 + Debug|WSA = Debug|WSA InEditor|Android = InEditor|Android + InEditor|Any CPU = InEditor|Any CPU InEditor|iOS = InEditor|iOS InEditor|WindowsStandalone32 = InEditor|WindowsStandalone32 InEditor|WindowsStandalone64 = InEditor|WindowsStandalone64 InEditor|WSA = InEditor|WSA Player|Android = Player|Android + Player|Any CPU = Player|Any CPU Player|iOS = Player|iOS Player|WindowsStandalone32 = Player|WindowsStandalone32 Player|WindowsStandalone64 = Player|WindowsStandalone64 Player|WSA = Player|WSA - Debug|Android = Debug|Android - Debug|Any CPU = Debug|Any CPU - Debug|iOS = Debug|iOS - Debug|WindowsStandalone32 = Debug|WindowsStandalone32 - Debug|WindowsStandalone64 = Debug|WindowsStandalone64 - Debug|WSA = Debug|WSA - InEditor|Any CPU = InEditor|Any CPU - Player|Any CPU = Player|Any CPU Release|Android = Release|Android Release|Any CPU = Release|Any CPU Release|iOS = Release|iOS diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs index 5770c4c..14a0904 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs @@ -373,27 +373,37 @@ void WriteConfigPlatformMapping(string configValue, string platformValue) configPlatform_PlatformToken.AssignValue(replacementSet, platformValue); } - void WriteConfigurationPlatform(string configValue) + SortedDictionary> configPlatformMap = new SortedDictionary>(); + + void AddPairToMap(string configuration, string platform) { - foreach (CompilationPlatformInfo platform in unityProjectInfo.AvailablePlatforms) + if (!configPlatformMap.TryGetValue(configuration, out SortedSet set)) { - if (solutionFileInfo != null) - { - solutionFileInfo.ConfigPlatformPairs.RemoveWhere(t => Equals(t.Configuration, configValue) && Equals(t.Platform, platform.Name)); - } - - WriteConfigPlatformMapping(configValue, platform.Name); + configPlatformMap[configuration] = set = new SortedSet(); } + + set.Add(platform); } - WriteConfigurationPlatform("InEditor"); - WriteConfigurationPlatform("Player"); + foreach (CompilationPlatformInfo platform in unityProjectInfo.AvailablePlatforms) + { + AddPairToMap("InEditor", platform.Name); + AddPairToMap("Player", platform.Name); + } if (solutionFileInfo != null) { foreach (ConfigPlatformPair item in solutionFileInfo.ConfigPlatformPairs) { - WriteConfigPlatformMapping(item.Configuration, item.Platform); + AddPairToMap(item.Configuration, item.Platform); + } + } + + foreach (KeyValuePair> setPair in configPlatformMap) + { + foreach (string platform in setPair.Value) + { + WriteConfigPlatformMapping(setPair.Key, platform); } } } From ead15348a301a3fbde57ac6443e99b83fe7e85d8 Mon Sep 17 00:00:00 2001 From: Andrei Borodin Date: Wed, 8 Jan 2020 12:01:47 -0800 Subject: [PATCH 13/18] Reworked config mapping rules for sln files. This should now be more flexible. --- .../Assets/Project.Unity.msb4u.sln | 328 ++++++++++++------ .../Exporters/TemplatedProjectExporter.cs | 187 +++++++--- .../Exporters/TextSolutionFileParser.cs | 52 ++- 3 files changed, 391 insertions(+), 176 deletions(-) diff --git a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln index f0b0ff8..663a250 100644 --- a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln +++ b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln @@ -70,8 +70,15 @@ Global Release|WSA = Release|WSA EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Debug|Android.ActiveCfg = Debug|Android + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Debug|iOS.ActiveCfg = Debug|iOS + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Debug|WindowsStandalone32.ActiveCfg = Debug|WindowsStandalone32 + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Debug|WindowsStandalone64.ActiveCfg = Debug|WindowsStandalone64 + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Debug|WSA.ActiveCfg = Debug|WSA {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|Android.ActiveCfg = InEditor|Android {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|Android.Build.0 = InEditor|Android + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|Any CPU.ActiveCfg = InEditor|Any CPU {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|iOS.ActiveCfg = InEditor|iOS {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|iOS.Build.0 = InEditor|iOS {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 @@ -81,13 +88,27 @@ Global {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WSA.ActiveCfg = InEditor|WSA {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WSA.Build.0 = InEditor|WSA {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|Android.ActiveCfg = Player|Android + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|Any CPU.ActiveCfg = Player|Any CPU {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|iOS.ActiveCfg = Player|iOS {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WSA.ActiveCfg = Player|WSA {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WSA.Build.0 = Player|WSA + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Release|Android.ActiveCfg = Release|Android + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Release|iOS.ActiveCfg = Release|iOS + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Release|WindowsStandalone32.ActiveCfg = Release|WindowsStandalone32 + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Release|WindowsStandalone64.ActiveCfg = Release|WindowsStandalone64 + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Release|WSA.ActiveCfg = Release|WSA + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Debug|Android.ActiveCfg = Debug|Android + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Debug|iOS.ActiveCfg = Debug|iOS + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Debug|WindowsStandalone32.ActiveCfg = Debug|WindowsStandalone32 + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Debug|WindowsStandalone64.ActiveCfg = Debug|WindowsStandalone64 + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Debug|WSA.ActiveCfg = Debug|WSA {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|Android.ActiveCfg = InEditor|Android {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|Android.Build.0 = InEditor|Android + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|Any CPU.ActiveCfg = InEditor|Any CPU {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|iOS.ActiveCfg = InEditor|iOS {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|iOS.Build.0 = InEditor|iOS {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 @@ -98,6 +119,7 @@ Global {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|WSA.Build.0 = InEditor|WSA {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|Android.ActiveCfg = Player|Android {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|Android.Build.0 = Player|Android + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|Any CPU.ActiveCfg = Player|Any CPU {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|iOS.ActiveCfg = Player|iOS {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|iOS.Build.0 = Player|iOS {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 @@ -106,8 +128,21 @@ Global {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|WSA.ActiveCfg = Player|WSA {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|WSA.Build.0 = Player|WSA + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Release|Android.ActiveCfg = Release|Android + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Release|iOS.ActiveCfg = Release|iOS + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Release|WindowsStandalone32.ActiveCfg = Release|WindowsStandalone32 + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Release|WindowsStandalone64.ActiveCfg = Release|WindowsStandalone64 + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Release|WSA.ActiveCfg = Release|WSA + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Debug|Android.ActiveCfg = Debug|Android + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Debug|iOS.ActiveCfg = Debug|iOS + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Debug|WindowsStandalone32.ActiveCfg = Debug|WindowsStandalone32 + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Debug|WindowsStandalone64.ActiveCfg = Debug|WindowsStandalone64 + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Debug|WSA.ActiveCfg = Debug|WSA {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|Android.ActiveCfg = InEditor|Android {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|Android.Build.0 = InEditor|Android + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|Any CPU.ActiveCfg = InEditor|Any CPU {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|iOS.ActiveCfg = InEditor|iOS {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|iOS.Build.0 = InEditor|iOS {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 @@ -117,12 +152,26 @@ Global {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|WSA.ActiveCfg = InEditor|WSA {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|WSA.Build.0 = InEditor|WSA {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|Android.ActiveCfg = Player|Android + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|Any CPU.ActiveCfg = Player|Any CPU {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|iOS.ActiveCfg = Player|iOS {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|WSA.ActiveCfg = Player|WSA + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Release|Android.ActiveCfg = Release|Android + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Release|iOS.ActiveCfg = Release|iOS + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Release|WindowsStandalone32.ActiveCfg = Release|WindowsStandalone32 + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Release|WindowsStandalone64.ActiveCfg = Release|WindowsStandalone64 + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Release|WSA.ActiveCfg = Release|WSA + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Debug|Android.ActiveCfg = Debug|Android + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Debug|iOS.ActiveCfg = Debug|iOS + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Debug|WindowsStandalone32.ActiveCfg = Debug|WindowsStandalone32 + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Debug|WindowsStandalone64.ActiveCfg = Debug|WindowsStandalone64 + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Debug|WSA.ActiveCfg = Debug|WSA {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|Android.ActiveCfg = InEditor|Android {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|Android.Build.0 = InEditor|Android + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|Any CPU.ActiveCfg = InEditor|Any CPU {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|iOS.ActiveCfg = InEditor|iOS {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|iOS.Build.0 = InEditor|iOS {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 @@ -132,12 +181,26 @@ Global {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|WSA.ActiveCfg = InEditor|WSA {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|WSA.Build.0 = InEditor|WSA {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|Android.ActiveCfg = Player|Android + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|Any CPU.ActiveCfg = Player|Any CPU {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|iOS.ActiveCfg = Player|iOS {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|WSA.ActiveCfg = Player|WSA + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Release|Android.ActiveCfg = Release|Android + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Release|iOS.ActiveCfg = Release|iOS + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Release|WindowsStandalone32.ActiveCfg = Release|WindowsStandalone32 + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Release|WindowsStandalone64.ActiveCfg = Release|WindowsStandalone64 + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Release|WSA.ActiveCfg = Release|WSA + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Debug|Android.ActiveCfg = Debug|Android + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Debug|iOS.ActiveCfg = Debug|iOS + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Debug|WindowsStandalone32.ActiveCfg = Debug|WindowsStandalone32 + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Debug|WindowsStandalone64.ActiveCfg = Debug|WindowsStandalone64 + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Debug|WSA.ActiveCfg = Debug|WSA {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|Android.ActiveCfg = InEditor|Android {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|Android.Build.0 = InEditor|Android + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|Any CPU.ActiveCfg = InEditor|Any CPU {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|iOS.ActiveCfg = InEditor|iOS {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|iOS.Build.0 = InEditor|iOS {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 @@ -147,12 +210,26 @@ Global {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|WSA.ActiveCfg = InEditor|WSA {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|WSA.Build.0 = InEditor|WSA {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|Android.ActiveCfg = Player|Android + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|Any CPU.ActiveCfg = Player|Any CPU {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|iOS.ActiveCfg = Player|iOS {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|WSA.ActiveCfg = Player|WSA + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Release|Android.ActiveCfg = Release|Android + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Release|iOS.ActiveCfg = Release|iOS + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Release|WindowsStandalone32.ActiveCfg = Release|WindowsStandalone32 + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Release|WindowsStandalone64.ActiveCfg = Release|WindowsStandalone64 + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Release|WSA.ActiveCfg = Release|WSA + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Debug|Android.ActiveCfg = Debug|Android + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Debug|iOS.ActiveCfg = Debug|iOS + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Debug|WindowsStandalone32.ActiveCfg = Debug|WindowsStandalone32 + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Debug|WindowsStandalone64.ActiveCfg = Debug|WindowsStandalone64 + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Debug|WSA.ActiveCfg = Debug|WSA {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|Android.ActiveCfg = InEditor|Android {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|Android.Build.0 = InEditor|Android + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|Any CPU.ActiveCfg = InEditor|Any CPU {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|iOS.ActiveCfg = InEditor|iOS {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|iOS.Build.0 = InEditor|iOS {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 @@ -163,6 +240,7 @@ Global {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|WSA.Build.0 = InEditor|WSA {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|Android.ActiveCfg = Player|Android {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|Android.Build.0 = Player|Android + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|Any CPU.ActiveCfg = Player|Any CPU {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|iOS.ActiveCfg = Player|iOS {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|iOS.Build.0 = Player|iOS {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 @@ -171,8 +249,21 @@ Global {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|WSA.ActiveCfg = Player|WSA {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|WSA.Build.0 = Player|WSA + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Release|Android.ActiveCfg = Release|Android + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Release|iOS.ActiveCfg = Release|iOS + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Release|WindowsStandalone32.ActiveCfg = Release|WindowsStandalone32 + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Release|WindowsStandalone64.ActiveCfg = Release|WindowsStandalone64 + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Release|WSA.ActiveCfg = Release|WSA + {6546D776-5B41-65B4-0850-B3667F981C26}.Debug|Android.ActiveCfg = Debug|Android + {6546D776-5B41-65B4-0850-B3667F981C26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6546D776-5B41-65B4-0850-B3667F981C26}.Debug|iOS.ActiveCfg = Debug|iOS + {6546D776-5B41-65B4-0850-B3667F981C26}.Debug|WindowsStandalone32.ActiveCfg = Debug|WindowsStandalone32 + {6546D776-5B41-65B4-0850-B3667F981C26}.Debug|WindowsStandalone64.ActiveCfg = Debug|WindowsStandalone64 + {6546D776-5B41-65B4-0850-B3667F981C26}.Debug|WSA.ActiveCfg = Debug|WSA {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|Android.ActiveCfg = InEditor|Android {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|Android.Build.0 = InEditor|Android + {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|Any CPU.ActiveCfg = InEditor|Any CPU {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|iOS.ActiveCfg = InEditor|iOS {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|iOS.Build.0 = InEditor|iOS {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 @@ -182,12 +273,26 @@ Global {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WSA.ActiveCfg = InEditor|WSA {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WSA.Build.0 = InEditor|WSA {6546D776-5B41-65B4-0850-B3667F981C26}.Player|Android.ActiveCfg = Player|Android + {6546D776-5B41-65B4-0850-B3667F981C26}.Player|Any CPU.ActiveCfg = Player|Any CPU {6546D776-5B41-65B4-0850-B3667F981C26}.Player|iOS.ActiveCfg = Player|iOS {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WSA.ActiveCfg = Player|WSA + {6546D776-5B41-65B4-0850-B3667F981C26}.Release|Android.ActiveCfg = Release|Android + {6546D776-5B41-65B4-0850-B3667F981C26}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6546D776-5B41-65B4-0850-B3667F981C26}.Release|iOS.ActiveCfg = Release|iOS + {6546D776-5B41-65B4-0850-B3667F981C26}.Release|WindowsStandalone32.ActiveCfg = Release|WindowsStandalone32 + {6546D776-5B41-65B4-0850-B3667F981C26}.Release|WindowsStandalone64.ActiveCfg = Release|WindowsStandalone64 + {6546D776-5B41-65B4-0850-B3667F981C26}.Release|WSA.ActiveCfg = Release|WSA + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Debug|Android.ActiveCfg = Debug|Android + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Debug|iOS.ActiveCfg = Debug|iOS + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Debug|WindowsStandalone32.ActiveCfg = Debug|WindowsStandalone32 + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Debug|WindowsStandalone64.ActiveCfg = Debug|WindowsStandalone64 + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Debug|WSA.ActiveCfg = Debug|WSA {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|Android.ActiveCfg = InEditor|Android {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|Android.Build.0 = InEditor|Android + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|Any CPU.ActiveCfg = InEditor|Any CPU {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|iOS.ActiveCfg = InEditor|iOS {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|iOS.Build.0 = InEditor|iOS {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 @@ -198,6 +303,7 @@ Global {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|WSA.Build.0 = InEditor|WSA {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|Android.ActiveCfg = Player|Android {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|Android.Build.0 = Player|Android + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|Any CPU.ActiveCfg = Player|Any CPU {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|iOS.ActiveCfg = Player|iOS {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|iOS.Build.0 = Player|iOS {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 @@ -206,122 +312,132 @@ Global {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|WSA.ActiveCfg = Player|WSA {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|WSA.Build.0 = Player|WSA + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Release|Android.ActiveCfg = Release|Android + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Release|iOS.ActiveCfg = Release|iOS + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Release|WindowsStandalone32.ActiveCfg = Release|WindowsStandalone32 + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Release|WindowsStandalone64.ActiveCfg = Release|WindowsStandalone64 + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Release|WSA.ActiveCfg = Release|WSA + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|Android.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|iOS.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|WindowsStandalone32.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|WindowsStandalone64.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|WSA.ActiveCfg = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|Android.ActiveCfg = Debug|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|Android.Build.0 = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|Any CPU.ActiveCfg = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|iOS.ActiveCfg = Debug|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|iOS.Build.0 = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WindowsStandalone32.ActiveCfg = Debug|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WindowsStandalone32.Build.0 = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WindowsStandalone64.ActiveCfg = Debug|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WindowsStandalone64.Build.0 = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WSA.ActiveCfg = Debug|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|WSA.Build.0 = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|Android.ActiveCfg = Debug|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|Android.Build.0 = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|Any CPU.ActiveCfg = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|iOS.ActiveCfg = Debug|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|iOS.Build.0 = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WindowsStandalone32.ActiveCfg = Debug|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WindowsStandalone32.Build.0 = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WindowsStandalone64.ActiveCfg = Debug|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WindowsStandalone64.Build.0 = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WSA.ActiveCfg = Debug|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WSA.Build.0 = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Android..ActiveCfg = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Android..Build.0 = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Any CPU..ActiveCfg = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Any CPU..Build.0 = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|iOS..ActiveCfg = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|iOS..Build.0 = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WindowsStandalone32..ActiveCfg = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WindowsStandalone32..Build.0 = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WindowsStandalone64..ActiveCfg = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WindowsStandalone64..Build.0 = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WSA..ActiveCfg = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WSA..Build.0 = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|Android..ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|Android..Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|Any CPU..ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|Any CPU..Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|iOS..ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|iOS..Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WindowsStandalone32..ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WindowsStandalone32..Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WindowsStandalone64..ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WindowsStandalone64..Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WSA..ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WSA..Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|Android..ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|Android..Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|Any CPU..ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|Any CPU..Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|iOS..ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|iOS..Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WindowsStandalone32..ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WindowsStandalone32..Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WindowsStandalone64..ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WindowsStandalone64..Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WSA..ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WSA..Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|Android..ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|Android..Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|Any CPU..ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|Any CPU..Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|iOS..ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|iOS..Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WindowsStandalone32..ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WindowsStandalone32..Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WindowsStandalone64..ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WindowsStandalone64..Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WSA..ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WSA..Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|Android..ActiveCfg = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|Android..Build.0 = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|Any CPU..ActiveCfg = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|Any CPU..Build.0 = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|iOS..ActiveCfg = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|iOS..Build.0 = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WindowsStandalone32..ActiveCfg = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WindowsStandalone32..Build.0 = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WindowsStandalone64..ActiveCfg = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WindowsStandalone64..Build.0 = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WSA..ActiveCfg = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WSA..Build.0 = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|Android..ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|Android..Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|Any CPU..ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|Any CPU..Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|iOS..ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|iOS..Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WindowsStandalone32..ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WindowsStandalone32..Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WindowsStandalone64..ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WindowsStandalone64..Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WSA..ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WSA..Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|Android..ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|Android..Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|Any CPU..ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|Any CPU..Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|iOS..ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|iOS..Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WindowsStandalone32..ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WindowsStandalone32..Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WindowsStandalone64..ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WindowsStandalone64..Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WSA..ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WSA..Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|Android..ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|Android..Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|Any CPU..ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|Any CPU..Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|iOS..ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|iOS..Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WindowsStandalone32..ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WindowsStandalone32..Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WindowsStandalone64..ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WindowsStandalone64..Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WSA..ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WSA..Build.0 = Release|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|Android.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|Any CPU.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|iOS.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|WindowsStandalone32.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|WindowsStandalone64.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|WSA.ActiveCfg = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Android...ActiveCfg = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Android...Build.0 = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Any CPU...ActiveCfg = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Any CPU...Build.0 = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|iOS...ActiveCfg = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|iOS...Build.0 = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WindowsStandalone32...ActiveCfg = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WindowsStandalone32...Build.0 = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WindowsStandalone64...ActiveCfg = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WindowsStandalone64...Build.0 = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WSA...ActiveCfg = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WSA...Build.0 = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|Android...ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|Android...Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|Any CPU...ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|Any CPU...Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|iOS...ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|iOS...Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WindowsStandalone32...ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WindowsStandalone32...Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WindowsStandalone64...ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WindowsStandalone64...Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WSA...ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WSA...Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|Android...ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|Android...Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|Any CPU...ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|Any CPU...Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|iOS...ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|iOS...Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WindowsStandalone32...ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WindowsStandalone32...Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WindowsStandalone64...ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WindowsStandalone64...Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WSA...ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WSA...Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|Android...ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|Android...Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|Any CPU...ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|Any CPU...Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|iOS...ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|iOS...Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WindowsStandalone32...ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WindowsStandalone32...Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WindowsStandalone64...ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WindowsStandalone64...Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WSA...ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WSA...Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|Android...ActiveCfg = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|Android...Build.0 = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|Any CPU...ActiveCfg = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|Any CPU...Build.0 = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|iOS...ActiveCfg = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|iOS...Build.0 = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WindowsStandalone32...ActiveCfg = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WindowsStandalone32...Build.0 = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WindowsStandalone64...ActiveCfg = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WindowsStandalone64...Build.0 = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WSA...ActiveCfg = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WSA...Build.0 = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|Android...ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|Android...Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|Any CPU...ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|Any CPU...Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|iOS...ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|iOS...Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WindowsStandalone32...ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WindowsStandalone32...Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WindowsStandalone64...ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WindowsStandalone64...Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WSA...ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WSA...Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|Android...ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|Android...Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|Any CPU...ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|Any CPU...Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|iOS...ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|iOS...Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WindowsStandalone32...ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WindowsStandalone32...Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WindowsStandalone64...ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WindowsStandalone64...Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WSA...ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WSA...Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|Android...ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|Android...Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|Any CPU...ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|Any CPU...Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|iOS...ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|iOS...Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WindowsStandalone32...ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WindowsStandalone32...Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WindowsStandalone64...ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WindowsStandalone64...Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WSA...ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WSA...Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs index 14a0904..835fd29 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs @@ -234,8 +234,6 @@ public void ExportSolution(UnityProjectInfo unityProjectInfo, MSBuildToolsConfig if (File.Exists(solutionFilePath)) { TextSolutionFileParser.TryParseExistingSolutionFile(solutionFilePath, out solutionFileInfo); - - File.Delete(solutionFilePath); } ITemplatePart rootTemplatePart = solutionFileTemplate.Root; @@ -259,10 +257,11 @@ public void ExportSolution(UnityProjectInfo unityProjectInfo, MSBuildToolsConfig ProcessSolutionFolders(rootTemplatePart, rootReplacementSet, folderNestedItems, generatedItems, solutionFileInfo); // Process Solution file configurations - ProcessSolutionConfigurationPlatform(unityProjectInfo, rootTemplatePart, rootReplacementSet, solutionFileInfo); + SortedDictionary> configPlatformMap = GetSolutuonConfigurationPlatformMap(unityProjectInfo, solutionFileInfo); + ProcessSolutionConfigurationPlatform(rootTemplatePart, rootReplacementSet, configPlatformMap); // Process Configurations Mappings - ProcessConfigPlatformMappings(unityProjectInfo, config, rootTemplatePart, rootReplacementSet, orderedProjects, generatedItems, solutionFileInfo); + ProcessConfigPlatformMappings(unityProjectInfo, config, rootTemplatePart, rootReplacementSet, orderedProjects, generatedItems, configPlatformMap, solutionFileInfo); // Write Solution Properties ITemplatePart solutionPropertiesTemplate = rootTemplatePart.Templates["SOLUTION_PROPERTIES"]; @@ -289,6 +288,12 @@ public void ExportSolution(UnityProjectInfo unityProjectInfo, MSBuildToolsConfig GenerateTopLevelDependenciesProject(unityProjectInfo, config.DependenciesProjectGuid); + // Delete before we write to minimize chance of just deleting in case above fails + if (File.Exists(solutionFilePath)) + { + File.Delete(solutionFilePath); + } + solutionFileTemplate.Write(solutionFilePath, rootReplacementSet); } @@ -305,32 +310,132 @@ private void ProcessExtraSolutionSections(ITemplatePart rootTemplatePart, Templa } } - private void ProcessConfigPlatformMappings(UnityProjectInfo unityProjectInfo, MSBuildToolsConfig config, ITemplatePart rootTemplatePart, TemplateReplacementSet rootReplacementSet, List orderedProjects, HashSet generatedItems, SolutionFileInfo solutionFileInfo) + private void ConfigurationTemplateReplace(ITemplatePart templatePart, TemplateReplacementSet replacementSet, Guid projectGuid, string slnConfiguration, string slnPlatform, string property, string projConfiguration, string projPlatform) + { + templatePart.Tokens["PROJECT_GUID"].AssignValue(replacementSet, projectGuid.ToString().ToUpper()); + templatePart.Tokens["SOLUTION_CONFIGURATION"].AssignValue(replacementSet, slnConfiguration); + templatePart.Tokens["SOLUTION_PLATFORM"].AssignValue(replacementSet, slnPlatform); + templatePart.Tokens["PROPERTY"].AssignValue(replacementSet, property); + templatePart.Tokens["PROJECT_CONFIGURATION"].AssignValue(replacementSet, projConfiguration); + templatePart.Tokens["PROJECT_PLATFORM"].AssignValue(replacementSet, projPlatform); + } + + private class ProjectConfigurationMapping + { + private readonly Dictionary> propertySet = new Dictionary>(); + + public SortedDictionary Mappings { get; } = new SortedDictionary(ConfigPlatformPair.Comparer.Instance); + + public HashSet GetPropertySet(ConfigPlatformPair configPair) + { + if (!propertySet.TryGetValue(configPair, out HashSet set)) + { + propertySet.Add(configPair, set = new HashSet()); + } + + return set; + } + } + + private void ProcessMappings(ITemplatePart configPlatformPropertyTemplate, TemplateReplacementSet rootReplacementSet, IEnumerable projectOrdering, Dictionary projectConfigMapping) + { + foreach (Guid projectGuid in projectOrdering) + { + ProjectConfigurationMapping mapping = projectConfigMapping[projectGuid]; + + foreach (KeyValuePair configSet in mapping.Mappings) + { + foreach (string property in mapping.GetPropertySet(configSet.Key)) + { + TemplateReplacementSet configMappingReplacementSet = configPlatformPropertyTemplate.CreateReplacementSet(rootReplacementSet); + ConfigurationTemplateReplace(configPlatformPropertyTemplate, configMappingReplacementSet, projectGuid, configSet.Key.Configuration, configSet.Key.Platform, property, configSet.Value.Configuration, configSet.Value.Platform); + } + } + } + } + + private void ProcessConfigPlatformMappings(UnityProjectInfo unityProjectInfo, MSBuildToolsConfig config, ITemplatePart rootTemplatePart, TemplateReplacementSet rootReplacementSet, List orderedProjects, HashSet generatedItems, SortedDictionary> configPlatformMap, SolutionFileInfo solutionFileInfo) { ITemplatePart configPlatformPropertyTemplate = rootTemplatePart.Templates["CONFIGURATION_PLATFORM_PROPERTY"]; - foreach (CSProjectInfo project in orderedProjects.Select(t => t)) + + List projectOrdering = new List(); + Dictionary projectConfigMapping = new Dictionary(); + + void ProcessDefaultMappings(ProjectConfigurationMapping mapping, ConfigPlatformPair? projectConfigOverride = null) + { + // Process defaults + foreach (KeyValuePair> pair in configPlatformMap) + { + foreach (string platform in pair.Value) + { + ConfigPlatformPair configPair = new ConfigPlatformPair(pair.Key, platform); + if (!mapping.Mappings.ContainsKey(configPair)) + { + mapping.Mappings[configPair] = projectConfigOverride ?? configPair; + HashSet set = mapping.GetPropertySet(configPair); + set.Add("ActiveCfg"); + } + } + } + } + + foreach (CSProjectInfo project in orderedProjects) { generatedItems.Add(project.Guid); - ProcessMappings(unityProjectInfo, configPlatformPropertyTemplate, rootReplacementSet, project.Guid, "InEditor", b => project.InEditorPlatforms.ContainsKey(b)); - ProcessMappings(unityProjectInfo, configPlatformPropertyTemplate, rootReplacementSet, project.Guid, "Player", b => project.PlayerPlatforms.ContainsKey(b)); + projectOrdering.Add(project.Guid); + + ProjectConfigurationMapping mapping = new ProjectConfigurationMapping(); + projectConfigMapping.Add(project.Guid, mapping); + + void ProcessProjectPlatforms(string configuration, IReadOnlyDictionary platforms) + { + foreach (KeyValuePair pair in platforms) + { + ConfigPlatformPair configPair = new ConfigPlatformPair(configuration, pair.Value.Name); + mapping.Mappings[configPair] = configPair; + HashSet set = mapping.GetPropertySet(configPair); + set.Add("ActiveCfg"); + set.Add("Build.0"); + } + } + + ProcessProjectPlatforms("InEditor", project.InEditorPlatforms); + ProcessProjectPlatforms("Player", project.PlayerPlatforms); + + ProcessDefaultMappings(mapping); } + // TODO finish generatedItems.Add(config.DependenciesProjectGuid); - // For dependencies project all mappings exist and are enabled but mapped to Debug|Any CPU by default - ProcessMappings(unityProjectInfo, configPlatformPropertyTemplate, rootReplacementSet, config.DependenciesProjectGuid, "InEditor", b => true, "Debug", "Any CPU"); - ProcessMappings(unityProjectInfo, configPlatformPropertyTemplate, rootReplacementSet, config.DependenciesProjectGuid, "Player", b => true, "Debug", "Any CPU"); + projectOrdering.Add(config.DependenciesProjectGuid); + ProjectConfigurationMapping dependencyProjectMapping = new ProjectConfigurationMapping(); + projectConfigMapping.Add(config.DependenciesProjectGuid, dependencyProjectMapping); + + ProcessDefaultMappings(dependencyProjectMapping, new ConfigPlatformPair("Debug", "Any CPU")); + + // Now process for projects not part of our list if (solutionFileInfo != null) { - foreach (ProjectConfigurationEntry item in solutionFileInfo.ProjectConfigurationEntires) + foreach (KeyValuePair> pair in solutionFileInfo.ProjectConfigurationEntires) { - if (solutionFileInfo.Projects.ContainsKey(item.ProjectGuid)) + if (solutionFileInfo.Projects.ContainsKey(pair.Key)) { - TemplateReplacementSet configMappingReplacementSet = configPlatformPropertyTemplate.CreateReplacementSet(rootReplacementSet); - ConfigurationTemplateReplace(configPlatformPropertyTemplate, configMappingReplacementSet, item.ProjectGuid, item.SolutionConfiguration, item.SolutionPlatform, item.Property, item.ProjectConfiguration, item.ProjectPlatform); + projectOrdering.Add(pair.Key); + + ProjectConfigurationMapping mapping = new ProjectConfigurationMapping(); + projectConfigMapping.Add(pair.Key, mapping); + + foreach (ProjectConfigurationEntry item in pair.Value) + { + mapping.Mappings[item.SolutionConfig] = item.ProjectConfig; + mapping.GetPropertySet(item.SolutionConfig).Add(item.Property); + } } } } + + ProcessMappings(configPlatformPropertyTemplate, rootReplacementSet, projectOrdering, projectConfigMapping); } private void ProcessPropertiesSet(ITemplatePart solutionPropertiesTemplate, TemplateReplacementSet rootReplacementSet, Dictionary propertySet, Dictionary existingPropertySet) @@ -359,20 +464,8 @@ void WriteSolutionProperty(string key, string value) } } - private void ProcessSolutionConfigurationPlatform(UnityProjectInfo unityProjectInfo, ITemplatePart rootTemplatePart, TemplateReplacementSet rootReplacementSet, SolutionFileInfo solutionFileInfo) + private SortedDictionary> GetSolutuonConfigurationPlatformMap(UnityProjectInfo unityProjectInfo, SolutionFileInfo solutionFileInfo) { - ITemplatePart configPlatformTemplate = rootTemplatePart.Templates["CONFIGURATION_PLATFORM"]; - - ITemplateToken configPlatform_ConfigurationToken = configPlatformTemplate.Tokens["CONFIGURATION"]; - ITemplateToken configPlatform_PlatformToken = configPlatformTemplate.Tokens["PLATFORM"]; - - void WriteConfigPlatformMapping(string configValue, string platformValue) - { - TemplateReplacementSet replacementSet = configPlatformTemplate.CreateReplacementSet(rootReplacementSet); - configPlatform_ConfigurationToken.AssignValue(replacementSet, configValue); - configPlatform_PlatformToken.AssignValue(replacementSet, platformValue); - } - SortedDictionary> configPlatformMap = new SortedDictionary>(); void AddPairToMap(string configuration, string platform) @@ -399,36 +492,28 @@ void AddPairToMap(string configuration, string platform) } } - foreach (KeyValuePair> setPair in configPlatformMap) - { - foreach (string platform in setPair.Value) - { - WriteConfigPlatformMapping(setPair.Key, platform); - } - } + return configPlatformMap; } - private void ConfigurationTemplateReplace(ITemplatePart templatePart, TemplateReplacementSet replacementSet, Guid guid, string slnConfiguration, string slnPlatform, string property, string projConfiguration, string projPlatform) + private void ProcessSolutionConfigurationPlatform(ITemplatePart rootTemplatePart, TemplateReplacementSet rootReplacementSet, SortedDictionary> configPlatformMap) { - templatePart.Tokens["PROJECT_GUID"].AssignValue(replacementSet, guid.ToString().ToUpper()); - templatePart.Tokens["SOLUTION_CONFIGURATION"].AssignValue(replacementSet, slnConfiguration); - templatePart.Tokens["SOLUTION_PLATFORM"].AssignValue(replacementSet, slnPlatform); - templatePart.Tokens["PROPERTY"].AssignValue(replacementSet, property); - templatePart.Tokens["PROJECT_CONFIGURATION"].AssignValue(replacementSet, projConfiguration); - templatePart.Tokens["PROJECT_PLATFORM"].AssignValue(replacementSet, projPlatform); - } + ITemplatePart configPlatformTemplate = rootTemplatePart.Templates["CONFIGURATION_PLATFORM"]; - private void ProcessMappings(UnityProjectInfo unityProjectInfo, ITemplatePart configPlatformPropertyTemplate, TemplateReplacementSet rootReplacementSet, Guid guid, string configuration, Func isEnabledConfigFunc, string projConfigOverride = null, string projPlatformOverride = null) - { - foreach (CompilationPlatformInfo platform in unityProjectInfo.AvailablePlatforms) + ITemplateToken configPlatform_ConfigurationToken = configPlatformTemplate.Tokens["CONFIGURATION"]; + ITemplateToken configPlatform_PlatformToken = configPlatformTemplate.Tokens["PLATFORM"]; + + void WriteConfigPlatformMapping(string configValue, string platformValue) { - TemplateReplacementSet configMappingReplacementSet = configPlatformPropertyTemplate.CreateReplacementSet(rootReplacementSet); - ConfigurationTemplateReplace(configPlatformPropertyTemplate, configMappingReplacementSet, guid, configuration, platform.Name, "ActiveCfg", projConfigOverride ?? configuration, projPlatformOverride ?? platform.Name); + TemplateReplacementSet replacementSet = configPlatformTemplate.CreateReplacementSet(rootReplacementSet); + configPlatform_ConfigurationToken.AssignValue(replacementSet, configValue); + configPlatform_PlatformToken.AssignValue(replacementSet, platformValue); + } - if (isEnabledConfigFunc(platform.BuildTarget)) + foreach (KeyValuePair> setPair in configPlatformMap) + { + foreach (string platform in setPair.Value) { - TemplateReplacementSet replacemetSet = configPlatformPropertyTemplate.CreateReplacementSet(rootReplacementSet); - ConfigurationTemplateReplace(configPlatformPropertyTemplate, replacemetSet, guid, configuration, platform.Name, "Build.0", projConfigOverride ?? configuration, projPlatformOverride ?? platform.Name); + WriteConfigPlatformMapping(setPair.Key, platform); } } } diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TextSolutionFileParser.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TextSolutionFileParser.cs index dc7f19f..ac54a4a 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TextSolutionFileParser.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TextSolutionFileParser.cs @@ -38,7 +38,7 @@ internal class SolutionFileInfo public Dictionary SolutionNotes { get; set; } - public List ProjectConfigurationEntires { get; set; } + public Dictionary> ProjectConfigurationEntires { get; set; } public HashSet MSB4UGeneratedItems { get; set; } } @@ -57,28 +57,39 @@ public ConfigPlatformPair(string configuration, string platform) public override bool Equals(object obj) { - return obj is ConfigPlatformPair other && Equals(Configuration, other.Configuration) && Equals(Platform, other.Platform); + return obj is ConfigPlatformPair other + && Equals(Configuration, other.Configuration) + && Equals(Platform, other.Platform); } public override int GetHashCode() { - return (Configuration?.GetHashCode() ?? 0) ^ (Platform?.GetHashCode() ?? 0); + return (Configuration?.GetHashCode() ?? 0) + ^ (Platform?.GetHashCode() ?? 0); + } + + internal struct Comparer : IComparer + { + internal static Comparer Instance { get; } = new Comparer(); + + public int Compare(ConfigPlatformPair x, ConfigPlatformPair y) + { + int results = string.Compare(x.Configuration, y.Configuration); + + return results == 0 + ? string.Compare(x.Platform, y.Platform) + : results; + } } } internal struct ProjectConfigurationEntry { - public Guid ProjectGuid { get; set; } + public ConfigPlatformPair SolutionConfig { get; set; } - public string SolutionConfiguration { get; set; } - - public string SolutionPlatform { get; set; } + public ConfigPlatformPair ProjectConfig { get; set; } public string Property { get; set; } - - public string ProjectConfiguration { get; set; } - - public string ProjectPlatform { get; set; } } internal struct SolutionFileSection @@ -133,7 +144,7 @@ private static SolutionFileInfo ParseExistingSolutionFile(string path) Dictionary extensibilityGlobals = new Dictionary(); Dictionary solutionNotes = new Dictionary(); Dictionary childToParentNestedMapping = new Dictionary(); - List projectConfigurationEntries = new List(); + Dictionary> projectConfigurationEntries = new Dictionary>(); HashSet msb4uGeneratedItems = new HashSet(); @@ -207,14 +218,17 @@ private static SolutionFileInfo ParseExistingSolutionFile(string path) // SAMPLE: {}.|.Build.0 = | string regex = @"{([^}]+)}\.([^\|]+)\|([^\.]+)([^\s]+)\s+=\s+([^\|]+)\|(.+)"; Match configMatch = Regex.Match(l, regex); - projectConfigurationEntries.Add(new ProjectConfigurationEntry() + Guid projectGuid = Guid.Parse(configMatch.Groups[1].Captures[0].Value); + if (!projectConfigurationEntries.TryGetValue(projectGuid, out List list)) + { + projectConfigurationEntries.Add(projectGuid, list = new List()); + } + + list.Add(new ProjectConfigurationEntry() { - ProjectGuid = Guid.Parse(configMatch.Groups[1].Captures[0].Value), - SolutionConfiguration = configMatch.Groups[2].Captures[0].Value, - SolutionPlatform = configMatch.Groups[3].Captures[0].Value, - Property = configMatch.Groups[4].Captures[0].Value, - ProjectConfiguration = configMatch.Groups[5].Captures[0].Value, - ProjectPlatform = configMatch.Groups[6].Captures[0].Value + SolutionConfig = new ConfigPlatformPair(configMatch.Groups[2].Captures[0].Value, configMatch.Groups[3].Captures[0].Value), + ProjectConfig = new ConfigPlatformPair(configMatch.Groups[5].Captures[0].Value, configMatch.Groups[6].Captures[0].Value), + Property = configMatch.Groups[4].Captures[0].Value }); }); break; From 5bebe68087c4fbd6c09f98431467509ffbb95cf4 Mon Sep 17 00:00:00 2001 From: Andrei Borodin Date: Wed, 8 Jan 2020 12:05:35 -0800 Subject: [PATCH 14/18] Fixed extra periods. --- .../Assets/Project.Unity.msb4u.sln | 192 +++++++++--------- .../Exporters/TextSolutionFileParser.cs | 2 +- 2 files changed, 97 insertions(+), 97 deletions(-) diff --git a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln index 663a250..8dba3ca 100644 --- a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln +++ b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln @@ -342,102 +342,102 @@ Global {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|WindowsStandalone32.ActiveCfg = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|WindowsStandalone64.ActiveCfg = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|WSA.ActiveCfg = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Android...ActiveCfg = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Android...Build.0 = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Any CPU...ActiveCfg = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Any CPU...Build.0 = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|iOS...ActiveCfg = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|iOS...Build.0 = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WindowsStandalone32...ActiveCfg = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WindowsStandalone32...Build.0 = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WindowsStandalone64...ActiveCfg = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WindowsStandalone64...Build.0 = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WSA...ActiveCfg = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WSA...Build.0 = Debug|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|Android...ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|Android...Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|Any CPU...ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|Any CPU...Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|iOS...ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|iOS...Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WindowsStandalone32...ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WindowsStandalone32...Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WindowsStandalone64...ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WindowsStandalone64...Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WSA...ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WSA...Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|Android...ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|Android...Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|Any CPU...ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|Any CPU...Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|iOS...ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|iOS...Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WindowsStandalone32...ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WindowsStandalone32...Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WindowsStandalone64...ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WindowsStandalone64...Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WSA...ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WSA...Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|Android...ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|Android...Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|Any CPU...ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|Any CPU...Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|iOS...ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|iOS...Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WindowsStandalone32...ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WindowsStandalone32...Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WindowsStandalone64...ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WindowsStandalone64...Build.0 = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WSA...ActiveCfg = Release|Any CPU - {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WSA...Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|Android...ActiveCfg = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|Android...Build.0 = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|Any CPU...ActiveCfg = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|Any CPU...Build.0 = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|iOS...ActiveCfg = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|iOS...Build.0 = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WindowsStandalone32...ActiveCfg = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WindowsStandalone32...Build.0 = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WindowsStandalone64...ActiveCfg = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WindowsStandalone64...Build.0 = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WSA...ActiveCfg = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WSA...Build.0 = Debug|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|Android...ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|Android...Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|Any CPU...ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|Any CPU...Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|iOS...ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|iOS...Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WindowsStandalone32...ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WindowsStandalone32...Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WindowsStandalone64...ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WindowsStandalone64...Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WSA...ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WSA...Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|Android...ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|Android...Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|Any CPU...ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|Any CPU...Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|iOS...ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|iOS...Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WindowsStandalone32...ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WindowsStandalone32...Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WindowsStandalone64...ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WindowsStandalone64...Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WSA...ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WSA...Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|Android...ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|Android...Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|Any CPU...ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|Any CPU...Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|iOS...ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|iOS...Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WindowsStandalone32...ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WindowsStandalone32...Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WindowsStandalone64...ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WindowsStandalone64...Build.0 = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WSA...ActiveCfg = Release|Any CPU - {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WSA...Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Android.ActiveCfg = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Android.Build.0 = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|iOS.ActiveCfg = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|iOS.Build.0 = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WindowsStandalone32.ActiveCfg = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WindowsStandalone32.Build.0 = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WindowsStandalone64.ActiveCfg = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WindowsStandalone64.Build.0 = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WSA.ActiveCfg = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|WSA.Build.0 = Debug|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|Android.ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|Android.Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|Any CPU.ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|Any CPU.Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|iOS.ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|iOS.Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WindowsStandalone32.ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WindowsStandalone32.Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WindowsStandalone64.ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WindowsStandalone64.Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WSA.ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.InEditor|WSA.Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|Android.ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|Android.Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|Any CPU.ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|Any CPU.Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|iOS.ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|iOS.Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WindowsStandalone32.ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WindowsStandalone32.Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WindowsStandalone64.ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WindowsStandalone64.Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WSA.ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Player|WSA.Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|Android.ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|Android.Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|Any CPU.Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|iOS.ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|iOS.Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WindowsStandalone32.ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WindowsStandalone32.Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WindowsStandalone64.ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WindowsStandalone64.Build.0 = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WSA.ActiveCfg = Release|Any CPU + {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Release|WSA.Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|Android.ActiveCfg = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|Android.Build.0 = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|iOS.ActiveCfg = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|iOS.Build.0 = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WindowsStandalone32.ActiveCfg = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WindowsStandalone32.Build.0 = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WindowsStandalone64.ActiveCfg = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WindowsStandalone64.Build.0 = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WSA.ActiveCfg = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Debug|WSA.Build.0 = Debug|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|Android.ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|Android.Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|Any CPU.ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|Any CPU.Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|iOS.ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|iOS.Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WindowsStandalone32.ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WindowsStandalone32.Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WindowsStandalone64.ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WindowsStandalone64.Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WSA.ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.InEditor|WSA.Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|Android.ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|Android.Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|Any CPU.ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|Any CPU.Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|iOS.ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|iOS.Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WindowsStandalone32.ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WindowsStandalone32.Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WindowsStandalone64.ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WindowsStandalone64.Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WSA.ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Player|WSA.Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|Android.ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|Android.Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|Any CPU.Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|iOS.ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|iOS.Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WindowsStandalone32.ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WindowsStandalone32.Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WindowsStandalone64.ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WindowsStandalone64.Build.0 = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WSA.ActiveCfg = Release|Any CPU + {06FDDF06-41BA-47F3-863F-E426A80C69A8}.Release|WSA.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TextSolutionFileParser.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TextSolutionFileParser.cs index ac54a4a..42e0895 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TextSolutionFileParser.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TextSolutionFileParser.cs @@ -216,7 +216,7 @@ private static SolutionFileInfo ParseExistingSolutionFile(string path) { // SAMPLE: {}.|.ActiveCfg = | // SAMPLE: {}.|.Build.0 = | - string regex = @"{([^}]+)}\.([^\|]+)\|([^\.]+)([^\s]+)\s+=\s+([^\|]+)\|(.+)"; + string regex = @"{([^}]+)}\.([^\|]+)\|([^\.]+)\.([^\s]+)\s+=\s+([^\|]+)\|(.+)"; Match configMatch = Regex.Match(l, regex); Guid projectGuid = Guid.Parse(configMatch.Groups[1].Captures[0].Value); if (!projectConfigurationEntries.TryGetValue(projectGuid, out List list)) From 0733604f1c27e8e3054d7a3dd05d7c1d9472928e Mon Sep 17 00:00:00 2001 From: Andrei Borodin Date: Wed, 8 Jan 2020 13:06:10 -0800 Subject: [PATCH 15/18] Fixed config mapping section regen. --- .../Assets/Project.Unity.msb4u.sln | 272 ++++++++++-------- .../Exporters/TemplatedProjectExporter.cs | 80 ++++-- 2 files changed, 216 insertions(+), 136 deletions(-) diff --git a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln index 8dba3ca..dac81f5 100644 --- a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln +++ b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln @@ -70,15 +70,15 @@ Global Release|WSA = Release|WSA EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Debug|Android.ActiveCfg = Debug|Android - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Debug|iOS.ActiveCfg = Debug|iOS - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Debug|WindowsStandalone32.ActiveCfg = Debug|WindowsStandalone32 - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Debug|WindowsStandalone64.ActiveCfg = Debug|WindowsStandalone64 - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Debug|WSA.ActiveCfg = Debug|WSA + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Debug|Android.ActiveCfg = InEditor|Android + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Debug|Any CPU.ActiveCfg = InEditor|Android + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Debug|iOS.ActiveCfg = InEditor|Android + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Debug|WindowsStandalone32.ActiveCfg = InEditor|Android + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Debug|WindowsStandalone64.ActiveCfg = InEditor|Android + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Debug|WSA.ActiveCfg = InEditor|Android {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|Android.ActiveCfg = InEditor|Android {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|Android.Build.0 = InEditor|Android - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|Any CPU.ActiveCfg = InEditor|Any CPU + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|Any CPU.ActiveCfg = InEditor|Android {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|iOS.ActiveCfg = InEditor|iOS {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|iOS.Build.0 = InEditor|iOS {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 @@ -88,27 +88,31 @@ Global {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WSA.ActiveCfg = InEditor|WSA {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WSA.Build.0 = InEditor|WSA {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|Android.ActiveCfg = Player|Android - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|Any CPU.ActiveCfg = Player|Any CPU + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|Android.Build.0 = Player|Android + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|Any CPU.ActiveCfg = Player|Android {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|iOS.ActiveCfg = Player|iOS + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|iOS.Build.0 = Player|iOS {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WSA.ActiveCfg = Player|WSA {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WSA.Build.0 = Player|WSA - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Release|Android.ActiveCfg = Release|Android - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Release|iOS.ActiveCfg = Release|iOS - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Release|WindowsStandalone32.ActiveCfg = Release|WindowsStandalone32 - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Release|WindowsStandalone64.ActiveCfg = Release|WindowsStandalone64 - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Release|WSA.ActiveCfg = Release|WSA - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Debug|Android.ActiveCfg = Debug|Android - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Debug|iOS.ActiveCfg = Debug|iOS - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Debug|WindowsStandalone32.ActiveCfg = Debug|WindowsStandalone32 - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Debug|WindowsStandalone64.ActiveCfg = Debug|WindowsStandalone64 - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Debug|WSA.ActiveCfg = Debug|WSA + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Release|Android.ActiveCfg = InEditor|Android + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Release|Any CPU.ActiveCfg = InEditor|Android + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Release|iOS.ActiveCfg = InEditor|Android + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Release|WindowsStandalone32.ActiveCfg = InEditor|Android + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Release|WindowsStandalone64.ActiveCfg = InEditor|Android + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Release|WSA.ActiveCfg = InEditor|Android + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Debug|Android.ActiveCfg = InEditor|Android + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Debug|Any CPU.ActiveCfg = InEditor|Android + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Debug|iOS.ActiveCfg = InEditor|Android + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Debug|WindowsStandalone32.ActiveCfg = InEditor|Android + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Debug|WindowsStandalone64.ActiveCfg = InEditor|Android + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Debug|WSA.ActiveCfg = InEditor|Android {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|Android.ActiveCfg = InEditor|Android {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|Android.Build.0 = InEditor|Android - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|Any CPU.ActiveCfg = InEditor|Any CPU + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|Any CPU.ActiveCfg = InEditor|Android {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|iOS.ActiveCfg = InEditor|iOS {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|iOS.Build.0 = InEditor|iOS {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 @@ -119,7 +123,7 @@ Global {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.InEditor|WSA.Build.0 = InEditor|WSA {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|Android.ActiveCfg = Player|Android {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|Android.Build.0 = Player|Android - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|Any CPU.ActiveCfg = Player|Any CPU + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|Any CPU.ActiveCfg = Player|Android {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|iOS.ActiveCfg = Player|iOS {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|iOS.Build.0 = Player|iOS {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 @@ -128,21 +132,21 @@ Global {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|WSA.ActiveCfg = Player|WSA {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Player|WSA.Build.0 = Player|WSA - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Release|Android.ActiveCfg = Release|Android - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Release|iOS.ActiveCfg = Release|iOS - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Release|WindowsStandalone32.ActiveCfg = Release|WindowsStandalone32 - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Release|WindowsStandalone64.ActiveCfg = Release|WindowsStandalone64 - {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Release|WSA.ActiveCfg = Release|WSA - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Debug|Android.ActiveCfg = Debug|Android - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Debug|iOS.ActiveCfg = Debug|iOS - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Debug|WindowsStandalone32.ActiveCfg = Debug|WindowsStandalone32 - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Debug|WindowsStandalone64.ActiveCfg = Debug|WindowsStandalone64 - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Debug|WSA.ActiveCfg = Debug|WSA + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Release|Android.ActiveCfg = InEditor|Android + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Release|Any CPU.ActiveCfg = InEditor|Android + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Release|iOS.ActiveCfg = InEditor|Android + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Release|WindowsStandalone32.ActiveCfg = InEditor|Android + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Release|WindowsStandalone64.ActiveCfg = InEditor|Android + {6055BE8E-BEFD-69E4-8B49-212B09B47B2F}.Release|WSA.ActiveCfg = InEditor|Android + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Debug|Android.ActiveCfg = InEditor|Android + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Debug|Any CPU.ActiveCfg = InEditor|Android + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Debug|iOS.ActiveCfg = InEditor|Android + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Debug|WindowsStandalone32.ActiveCfg = InEditor|Android + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Debug|WindowsStandalone64.ActiveCfg = InEditor|Android + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Debug|WSA.ActiveCfg = InEditor|Android {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|Android.ActiveCfg = InEditor|Android {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|Android.Build.0 = InEditor|Android - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|Any CPU.ActiveCfg = InEditor|Any CPU + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|Any CPU.ActiveCfg = InEditor|Android {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|iOS.ActiveCfg = InEditor|iOS {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|iOS.Build.0 = InEditor|iOS {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 @@ -152,26 +156,31 @@ Global {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|WSA.ActiveCfg = InEditor|WSA {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|WSA.Build.0 = InEditor|WSA {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|Android.ActiveCfg = Player|Android - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|Any CPU.ActiveCfg = Player|Any CPU + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|Android.Build.0 = Player|Android + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|Any CPU.ActiveCfg = Player|Android {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|iOS.ActiveCfg = Player|iOS + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|iOS.Build.0 = Player|iOS {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|WSA.ActiveCfg = Player|WSA - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Release|Android.ActiveCfg = Release|Android - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Release|iOS.ActiveCfg = Release|iOS - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Release|WindowsStandalone32.ActiveCfg = Release|WindowsStandalone32 - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Release|WindowsStandalone64.ActiveCfg = Release|WindowsStandalone64 - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Release|WSA.ActiveCfg = Release|WSA - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Debug|Android.ActiveCfg = Debug|Android - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Debug|iOS.ActiveCfg = Debug|iOS - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Debug|WindowsStandalone32.ActiveCfg = Debug|WindowsStandalone32 - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Debug|WindowsStandalone64.ActiveCfg = Debug|WindowsStandalone64 - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Debug|WSA.ActiveCfg = Debug|WSA + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|WSA.Build.0 = Player|WSA + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Release|Android.ActiveCfg = InEditor|Android + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Release|Any CPU.ActiveCfg = InEditor|Android + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Release|iOS.ActiveCfg = InEditor|Android + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Release|WindowsStandalone32.ActiveCfg = InEditor|Android + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Release|WindowsStandalone64.ActiveCfg = InEditor|Android + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Release|WSA.ActiveCfg = InEditor|Android + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Debug|Android.ActiveCfg = InEditor|Android + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Debug|Any CPU.ActiveCfg = InEditor|Android + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Debug|iOS.ActiveCfg = InEditor|Android + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Debug|WindowsStandalone32.ActiveCfg = InEditor|Android + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Debug|WindowsStandalone64.ActiveCfg = InEditor|Android + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Debug|WSA.ActiveCfg = InEditor|Android {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|Android.ActiveCfg = InEditor|Android {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|Android.Build.0 = InEditor|Android - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|Any CPU.ActiveCfg = InEditor|Any CPU + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|Any CPU.ActiveCfg = InEditor|Android {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|iOS.ActiveCfg = InEditor|iOS {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|iOS.Build.0 = InEditor|iOS {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 @@ -181,26 +190,31 @@ Global {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|WSA.ActiveCfg = InEditor|WSA {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|WSA.Build.0 = InEditor|WSA {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|Android.ActiveCfg = Player|Android - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|Any CPU.ActiveCfg = Player|Any CPU + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|Android.Build.0 = Player|Android + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|Any CPU.ActiveCfg = Player|Android {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|iOS.ActiveCfg = Player|iOS + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|iOS.Build.0 = Player|iOS {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|WSA.ActiveCfg = Player|WSA - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Release|Android.ActiveCfg = Release|Android - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Release|iOS.ActiveCfg = Release|iOS - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Release|WindowsStandalone32.ActiveCfg = Release|WindowsStandalone32 - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Release|WindowsStandalone64.ActiveCfg = Release|WindowsStandalone64 - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Release|WSA.ActiveCfg = Release|WSA - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Debug|Android.ActiveCfg = Debug|Android - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Debug|iOS.ActiveCfg = Debug|iOS - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Debug|WindowsStandalone32.ActiveCfg = Debug|WindowsStandalone32 - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Debug|WindowsStandalone64.ActiveCfg = Debug|WindowsStandalone64 - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Debug|WSA.ActiveCfg = Debug|WSA + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|WSA.Build.0 = Player|WSA + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Release|Android.ActiveCfg = InEditor|Android + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Release|Any CPU.ActiveCfg = InEditor|Android + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Release|iOS.ActiveCfg = InEditor|Android + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Release|WindowsStandalone32.ActiveCfg = InEditor|Android + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Release|WindowsStandalone64.ActiveCfg = InEditor|Android + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Release|WSA.ActiveCfg = InEditor|Android + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Debug|Android.ActiveCfg = InEditor|Android + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Debug|Any CPU.ActiveCfg = InEditor|Android + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Debug|iOS.ActiveCfg = InEditor|Android + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Debug|WindowsStandalone32.ActiveCfg = InEditor|Android + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Debug|WindowsStandalone64.ActiveCfg = InEditor|Android + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Debug|WSA.ActiveCfg = InEditor|Android {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|Android.ActiveCfg = InEditor|Android {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|Android.Build.0 = InEditor|Android - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|Any CPU.ActiveCfg = InEditor|Any CPU + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|Any CPU.ActiveCfg = InEditor|Android {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|iOS.ActiveCfg = InEditor|iOS {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|iOS.Build.0 = InEditor|iOS {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 @@ -210,26 +224,31 @@ Global {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|WSA.ActiveCfg = InEditor|WSA {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|WSA.Build.0 = InEditor|WSA {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|Android.ActiveCfg = Player|Android - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|Any CPU.ActiveCfg = Player|Any CPU + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|Android.Build.0 = Player|Android + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|Any CPU.ActiveCfg = Player|Android {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|iOS.ActiveCfg = Player|iOS + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|iOS.Build.0 = Player|iOS {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|WSA.ActiveCfg = Player|WSA - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Release|Android.ActiveCfg = Release|Android - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Release|iOS.ActiveCfg = Release|iOS - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Release|WindowsStandalone32.ActiveCfg = Release|WindowsStandalone32 - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Release|WindowsStandalone64.ActiveCfg = Release|WindowsStandalone64 - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Release|WSA.ActiveCfg = Release|WSA - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Debug|Android.ActiveCfg = Debug|Android - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Debug|iOS.ActiveCfg = Debug|iOS - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Debug|WindowsStandalone32.ActiveCfg = Debug|WindowsStandalone32 - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Debug|WindowsStandalone64.ActiveCfg = Debug|WindowsStandalone64 - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Debug|WSA.ActiveCfg = Debug|WSA + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|WSA.Build.0 = Player|WSA + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Release|Android.ActiveCfg = InEditor|Android + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Release|Any CPU.ActiveCfg = InEditor|Android + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Release|iOS.ActiveCfg = InEditor|Android + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Release|WindowsStandalone32.ActiveCfg = InEditor|Android + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Release|WindowsStandalone64.ActiveCfg = InEditor|Android + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Release|WSA.ActiveCfg = InEditor|Android + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Debug|Android.ActiveCfg = InEditor|Android + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Debug|Any CPU.ActiveCfg = InEditor|Android + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Debug|iOS.ActiveCfg = InEditor|Android + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Debug|WindowsStandalone32.ActiveCfg = InEditor|Android + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Debug|WindowsStandalone64.ActiveCfg = InEditor|Android + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Debug|WSA.ActiveCfg = InEditor|Android {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|Android.ActiveCfg = InEditor|Android {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|Android.Build.0 = InEditor|Android - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|Any CPU.ActiveCfg = InEditor|Any CPU + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|Any CPU.ActiveCfg = InEditor|Android {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|iOS.ActiveCfg = InEditor|iOS {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|iOS.Build.0 = InEditor|iOS {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 @@ -240,7 +259,7 @@ Global {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.InEditor|WSA.Build.0 = InEditor|WSA {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|Android.ActiveCfg = Player|Android {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|Android.Build.0 = Player|Android - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|Any CPU.ActiveCfg = Player|Any CPU + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|Any CPU.ActiveCfg = Player|Android {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|iOS.ActiveCfg = Player|iOS {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|iOS.Build.0 = Player|iOS {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 @@ -249,21 +268,21 @@ Global {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|WSA.ActiveCfg = Player|WSA {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Player|WSA.Build.0 = Player|WSA - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Release|Android.ActiveCfg = Release|Android - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Release|iOS.ActiveCfg = Release|iOS - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Release|WindowsStandalone32.ActiveCfg = Release|WindowsStandalone32 - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Release|WindowsStandalone64.ActiveCfg = Release|WindowsStandalone64 - {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Release|WSA.ActiveCfg = Release|WSA - {6546D776-5B41-65B4-0850-B3667F981C26}.Debug|Android.ActiveCfg = Debug|Android - {6546D776-5B41-65B4-0850-B3667F981C26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6546D776-5B41-65B4-0850-B3667F981C26}.Debug|iOS.ActiveCfg = Debug|iOS - {6546D776-5B41-65B4-0850-B3667F981C26}.Debug|WindowsStandalone32.ActiveCfg = Debug|WindowsStandalone32 - {6546D776-5B41-65B4-0850-B3667F981C26}.Debug|WindowsStandalone64.ActiveCfg = Debug|WindowsStandalone64 - {6546D776-5B41-65B4-0850-B3667F981C26}.Debug|WSA.ActiveCfg = Debug|WSA + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Release|Android.ActiveCfg = InEditor|Android + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Release|Any CPU.ActiveCfg = InEditor|Android + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Release|iOS.ActiveCfg = InEditor|Android + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Release|WindowsStandalone32.ActiveCfg = InEditor|Android + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Release|WindowsStandalone64.ActiveCfg = InEditor|Android + {0FDA7EBE-61AB-2164-383D-10E32EFB9C6E}.Release|WSA.ActiveCfg = InEditor|Android + {6546D776-5B41-65B4-0850-B3667F981C26}.Debug|Android.ActiveCfg = InEditor|Android + {6546D776-5B41-65B4-0850-B3667F981C26}.Debug|Any CPU.ActiveCfg = InEditor|Android + {6546D776-5B41-65B4-0850-B3667F981C26}.Debug|iOS.ActiveCfg = InEditor|Android + {6546D776-5B41-65B4-0850-B3667F981C26}.Debug|WindowsStandalone32.ActiveCfg = InEditor|Android + {6546D776-5B41-65B4-0850-B3667F981C26}.Debug|WindowsStandalone64.ActiveCfg = InEditor|Android + {6546D776-5B41-65B4-0850-B3667F981C26}.Debug|WSA.ActiveCfg = InEditor|Android {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|Android.ActiveCfg = InEditor|Android {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|Android.Build.0 = InEditor|Android - {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|Any CPU.ActiveCfg = InEditor|Any CPU + {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|Any CPU.ActiveCfg = InEditor|Android {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|iOS.ActiveCfg = InEditor|iOS {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|iOS.Build.0 = InEditor|iOS {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 @@ -273,26 +292,31 @@ Global {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WSA.ActiveCfg = InEditor|WSA {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WSA.Build.0 = InEditor|WSA {6546D776-5B41-65B4-0850-B3667F981C26}.Player|Android.ActiveCfg = Player|Android - {6546D776-5B41-65B4-0850-B3667F981C26}.Player|Any CPU.ActiveCfg = Player|Any CPU + {6546D776-5B41-65B4-0850-B3667F981C26}.Player|Android.Build.0 = Player|Android + {6546D776-5B41-65B4-0850-B3667F981C26}.Player|Any CPU.ActiveCfg = Player|Android {6546D776-5B41-65B4-0850-B3667F981C26}.Player|iOS.ActiveCfg = Player|iOS + {6546D776-5B41-65B4-0850-B3667F981C26}.Player|iOS.Build.0 = Player|iOS {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 + {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 + {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WSA.ActiveCfg = Player|WSA - {6546D776-5B41-65B4-0850-B3667F981C26}.Release|Android.ActiveCfg = Release|Android - {6546D776-5B41-65B4-0850-B3667F981C26}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6546D776-5B41-65B4-0850-B3667F981C26}.Release|iOS.ActiveCfg = Release|iOS - {6546D776-5B41-65B4-0850-B3667F981C26}.Release|WindowsStandalone32.ActiveCfg = Release|WindowsStandalone32 - {6546D776-5B41-65B4-0850-B3667F981C26}.Release|WindowsStandalone64.ActiveCfg = Release|WindowsStandalone64 - {6546D776-5B41-65B4-0850-B3667F981C26}.Release|WSA.ActiveCfg = Release|WSA - {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Debug|Android.ActiveCfg = Debug|Android - {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Debug|iOS.ActiveCfg = Debug|iOS - {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Debug|WindowsStandalone32.ActiveCfg = Debug|WindowsStandalone32 - {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Debug|WindowsStandalone64.ActiveCfg = Debug|WindowsStandalone64 - {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Debug|WSA.ActiveCfg = Debug|WSA + {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WSA.Build.0 = Player|WSA + {6546D776-5B41-65B4-0850-B3667F981C26}.Release|Android.ActiveCfg = InEditor|Android + {6546D776-5B41-65B4-0850-B3667F981C26}.Release|Any CPU.ActiveCfg = InEditor|Android + {6546D776-5B41-65B4-0850-B3667F981C26}.Release|iOS.ActiveCfg = InEditor|Android + {6546D776-5B41-65B4-0850-B3667F981C26}.Release|WindowsStandalone32.ActiveCfg = InEditor|Android + {6546D776-5B41-65B4-0850-B3667F981C26}.Release|WindowsStandalone64.ActiveCfg = InEditor|Android + {6546D776-5B41-65B4-0850-B3667F981C26}.Release|WSA.ActiveCfg = InEditor|Android + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Debug|Android.ActiveCfg = InEditor|Android + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Debug|Any CPU.ActiveCfg = InEditor|Android + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Debug|iOS.ActiveCfg = InEditor|Android + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Debug|WindowsStandalone32.ActiveCfg = InEditor|Android + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Debug|WindowsStandalone64.ActiveCfg = InEditor|Android + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Debug|WSA.ActiveCfg = InEditor|Android {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|Android.ActiveCfg = InEditor|Android {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|Android.Build.0 = InEditor|Android - {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|Any CPU.ActiveCfg = InEditor|Any CPU + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|Any CPU.ActiveCfg = InEditor|Android {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|iOS.ActiveCfg = InEditor|iOS {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|iOS.Build.0 = InEditor|iOS {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|WindowsStandalone32.ActiveCfg = InEditor|WindowsStandalone32 @@ -303,7 +327,7 @@ Global {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.InEditor|WSA.Build.0 = InEditor|WSA {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|Android.ActiveCfg = Player|Android {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|Android.Build.0 = Player|Android - {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|Any CPU.ActiveCfg = Player|Any CPU + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|Any CPU.ActiveCfg = Player|Android {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|iOS.ActiveCfg = Player|iOS {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|iOS.Build.0 = Player|iOS {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 @@ -312,18 +336,24 @@ Global {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|WSA.ActiveCfg = Player|WSA {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Player|WSA.Build.0 = Player|WSA - {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Release|Android.ActiveCfg = Release|Android - {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Release|iOS.ActiveCfg = Release|iOS - {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Release|WindowsStandalone32.ActiveCfg = Release|WindowsStandalone32 - {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Release|WindowsStandalone64.ActiveCfg = Release|WindowsStandalone64 - {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Release|WSA.ActiveCfg = Release|WSA + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Release|Android.ActiveCfg = InEditor|Android + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Release|Any CPU.ActiveCfg = InEditor|Android + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Release|iOS.ActiveCfg = InEditor|Android + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Release|WindowsStandalone32.ActiveCfg = InEditor|Android + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Release|WindowsStandalone64.ActiveCfg = InEditor|Android + {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Release|WSA.ActiveCfg = InEditor|Android {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|Android.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|Android.Build.0 = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|Any CPU.Build.0 = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|iOS.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|iOS.Build.0 = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|WindowsStandalone32.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|WindowsStandalone32.Build.0 = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|WindowsStandalone64.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|WindowsStandalone64.Build.0 = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|WSA.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|WSA.Build.0 = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|Android.ActiveCfg = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|Any CPU.ActiveCfg = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|iOS.ActiveCfg = Debug|Any CPU @@ -336,12 +366,18 @@ Global {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WindowsStandalone32.ActiveCfg = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WindowsStandalone64.ActiveCfg = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WSA.ActiveCfg = Debug|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|Android.ActiveCfg = Debug|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|Any CPU.ActiveCfg = Debug|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|iOS.ActiveCfg = Debug|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|WindowsStandalone32.ActiveCfg = Debug|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|WindowsStandalone64.ActiveCfg = Debug|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|WSA.ActiveCfg = Debug|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|Android.ActiveCfg = Release|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|Android.Build.0 = Release|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|Any CPU.Build.0 = Release|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|iOS.ActiveCfg = Release|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|iOS.Build.0 = Release|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|WindowsStandalone32.ActiveCfg = Release|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|WindowsStandalone32.Build.0 = Release|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|WindowsStandalone64.ActiveCfg = Release|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|WindowsStandalone64.Build.0 = Release|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|WSA.ActiveCfg = Release|Any CPU + {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|WSA.Build.0 = Release|Any CPU {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Android.ActiveCfg = Debug|Any CPU {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Android.Build.0 = Debug|Any CPU {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs index 835fd29..defdff0 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs @@ -335,6 +335,21 @@ public HashSet GetPropertySet(ConfigPlatformPair configPair) return set; } + + public void AddConfigurationMapping(ConfigPlatformPair configMapping, params string[] properties) + { + AddConfigurationMapping(configMapping, configMapping, properties); + } + + public void AddConfigurationMapping(ConfigPlatformPair solutionMapping, ConfigPlatformPair projectMapping, params string[] properties) + { + Mappings[solutionMapping] = projectMapping; + HashSet set = GetPropertySet(solutionMapping); + foreach (string property in properties) + { + set.Add(property); + } + } } private void ProcessMappings(ITemplatePart configPlatformPropertyTemplate, TemplateReplacementSet rootReplacementSet, IEnumerable projectOrdering, Dictionary projectConfigMapping) @@ -361,60 +376,89 @@ private void ProcessConfigPlatformMappings(UnityProjectInfo unityProjectInfo, MS List projectOrdering = new List(); Dictionary projectConfigMapping = new Dictionary(); - void ProcessDefaultMappings(ProjectConfigurationMapping mapping, ConfigPlatformPair? projectConfigOverride = null) + void ProcessDefaultMappings(ProjectConfigurationMapping mapping, Dictionary> enabledMappings) { // Process defaults foreach (KeyValuePair> pair in configPlatformMap) { + string projectConfig = pair.Key; + string defaultPlatform = null; + if (!enabledMappings.TryGetValue(projectConfig, out List enabledPlatforms)) + { + KeyValuePair> enabledPair = enabledMappings.First(); + projectConfig = enabledPair.Key; + defaultPlatform = enabledPair.Value[0]; + } + foreach (string platform in pair.Value) { - ConfigPlatformPair configPair = new ConfigPlatformPair(pair.Key, platform); - if (!mapping.Mappings.ContainsKey(configPair)) + ConfigPlatformPair slnConfigPair = new ConfigPlatformPair(pair.Key, platform); + if (!mapping.Mappings.ContainsKey(slnConfigPair)) { - mapping.Mappings[configPair] = projectConfigOverride ?? configPair; - HashSet set = mapping.GetPropertySet(configPair); + ConfigPlatformPair projectPair; + if (!(enabledPlatforms?.Contains(platform) ?? false)) + { + projectPair = new ConfigPlatformPair(projectConfig, enabledPlatforms?[0] ?? defaultPlatform); + } + else + { + projectPair = new ConfigPlatformPair(projectConfig, platform); + } + mapping.Mappings[slnConfigPair] = projectPair; + HashSet set = mapping.GetPropertySet(slnConfigPair); set.Add("ActiveCfg"); } } } } + // Iterate over every project foreach (CSProjectInfo project in orderedProjects) { + // Mark as generated item generatedItems.Add(project.Guid); + + // Add it to the ordering List for output projectOrdering.Add(project.Guid); + // Create mapping container for the project ProjectConfigurationMapping mapping = new ProjectConfigurationMapping(); projectConfigMapping.Add(project.Guid, mapping); - void ProcessProjectPlatforms(string configuration, IReadOnlyDictionary platforms) + void ProcessProjectPlatforms(string configuration, IEnumerable platforms) { - foreach (KeyValuePair pair in platforms) + foreach (string platform in platforms) { - ConfigPlatformPair configPair = new ConfigPlatformPair(configuration, pair.Value.Name); - mapping.Mappings[configPair] = configPair; - HashSet set = mapping.GetPropertySet(configPair); - set.Add("ActiveCfg"); - set.Add("Build.0"); + mapping.AddConfigurationMapping(new ConfigPlatformPair(configuration, platform), "ActiveCfg", "Build.0"); } } - ProcessProjectPlatforms("InEditor", project.InEditorPlatforms); - ProcessProjectPlatforms("Player", project.PlayerPlatforms); + List enabledInEditorPlatforms = project.InEditorPlatforms.Select(t => t.Value.Name).ToList(); + List enabledPlayerPlatforms = project.PlayerPlatforms.Select(t => t.Value.Name).ToList(); + + // Add InEditor and Player platform mappings that are enabled for build + ProcessProjectPlatforms("InEditor", enabledInEditorPlatforms); + ProcessProjectPlatforms("Player", enabledPlayerPlatforms); - ProcessDefaultMappings(mapping); + // Add all other known solution mappings, map to itself or allowed mappings + ProcessDefaultMappings(mapping, new Dictionary> { { "InEditor", enabledInEditorPlatforms }, { "Player", enabledPlayerPlatforms } }); } - // TODO finish + // Process the Dependencies Project now generatedItems.Add(config.DependenciesProjectGuid); projectOrdering.Add(config.DependenciesProjectGuid); ProjectConfigurationMapping dependencyProjectMapping = new ProjectConfigurationMapping(); projectConfigMapping.Add(config.DependenciesProjectGuid, dependencyProjectMapping); - ProcessDefaultMappings(dependencyProjectMapping, new ConfigPlatformPair("Debug", "Any CPU")); + // Add default Release/Debug mappings + dependencyProjectMapping.AddConfigurationMapping(new ConfigPlatformPair("Debug", "Any CPU"), "ActiveCfg", "Build.0"); + dependencyProjectMapping.AddConfigurationMapping(new ConfigPlatformPair("Release", "Any CPU"), "ActiveCfg", "Build.0"); + + List anyCpuPlatform = new List { "Any CPU" }; + ProcessDefaultMappings(dependencyProjectMapping, new Dictionary> { { "Debug", anyCpuPlatform }, { "Release", anyCpuPlatform } }); - // Now process for projects not part of our list + // Process projects that we aren't generating, but were added to the solution file if (solutionFileInfo != null) { foreach (KeyValuePair> pair in solutionFileInfo.ProjectConfigurationEntires) From 06cc90e8a6cac059acd45e48823becaeee5676bd Mon Sep 17 00:00:00 2001 From: Andrei Borodin Date: Wed, 8 Jan 2020 14:29:15 -0800 Subject: [PATCH 16/18] A few more fixes. --- .../MSBuildTemplates/SolutionTemplate.sln.template | 4 ++-- .../Scripts/Exporters/TemplatedProjectExporter.cs | 7 ++++--- .../Scripts/Exporters/TextSolutionFileParser.cs | 8 ++++---- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template index 64df863..02cae39 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/MSBuildTemplates/SolutionTemplate.sln.template @@ -10,9 +10,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "", ") = + ProjectSection() = #EXTRA_SECTION_LINE_TEMPLATE - EndGlobalSection + EndProjectSection #EXTRA_PROJECT_SECTION_TEMPLATE_END EndProject #PROJECT_TEMPLATE_END diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs index defdff0..646b231 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs @@ -383,7 +383,7 @@ void ProcessDefaultMappings(ProjectConfigurationMapping mapping, Dictionary enabledPlatforms)) + if (!enabledMappings.TryGetValue(projectConfig, out List enabledPlatforms) || enabledPlatforms.Count == 0) { KeyValuePair> enabledPair = enabledMappings.First(); projectConfig = enabledPair.Key; @@ -398,7 +398,8 @@ void ProcessDefaultMappings(ProjectConfigurationMapping mapping, Dictionary ReadSection(StreamReader reader, string sectionName, T sessionType) + private static SolutionFileSection ReadSection(StreamReader reader, string sectionName, T sessionType, string endSectionTag) { List sectionLines = new List(); - ReadLinesUntil(reader, "EndProjectSection", sectionLines.Add); + ReadLinesUntil(reader, endSectionTag, sectionLines.Add); return new SolutionFileSection() { From 05290814ea67c541022c2cc00cde168164f3726f Mon Sep 17 00:00:00 2001 From: Andrei Borodin Date: Wed, 8 Jan 2020 14:30:09 -0800 Subject: [PATCH 17/18] And checking in updated sln file. --- .../Assets/Project.Unity.msb4u.sln | 92 ++++++------------- 1 file changed, 29 insertions(+), 63 deletions(-) diff --git a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln index dac81f5..d87a3cd 100644 --- a/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln +++ b/Samples/IntegratedDependencies.Unity/Assets/Project.Unity.msb4u.sln @@ -87,15 +87,11 @@ Global {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WSA.ActiveCfg = InEditor|WSA {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.InEditor|WSA.Build.0 = InEditor|WSA - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|Android.ActiveCfg = Player|Android - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|Android.Build.0 = Player|Android - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|Any CPU.ActiveCfg = Player|Android - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|iOS.ActiveCfg = Player|iOS - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|iOS.Build.0 = Player|iOS - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 - {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|Android.ActiveCfg = Player|WSA + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|Any CPU.ActiveCfg = Player|WSA + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|iOS.ActiveCfg = Player|WSA + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WindowsStandalone32.ActiveCfg = Player|WSA + {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WindowsStandalone64.ActiveCfg = Player|WSA {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WSA.ActiveCfg = Player|WSA {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Player|WSA.Build.0 = Player|WSA {BB41A40A-FD6B-AD74-0865-83AB52977BDC}.Release|Android.ActiveCfg = InEditor|Android @@ -155,17 +151,12 @@ Global {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|WSA.ActiveCfg = InEditor|WSA {15A615C7-33AA-2409-09FE-0B28B0D5143C}.InEditor|WSA.Build.0 = InEditor|WSA - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|Android.ActiveCfg = Player|Android - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|Android.Build.0 = Player|Android - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|Any CPU.ActiveCfg = Player|Android - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|iOS.ActiveCfg = Player|iOS - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|iOS.Build.0 = Player|iOS - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|WSA.ActiveCfg = Player|WSA - {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|WSA.Build.0 = Player|WSA + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|Android.ActiveCfg = InEditor|Android + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|Any CPU.ActiveCfg = InEditor|Android + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|iOS.ActiveCfg = InEditor|Android + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|WindowsStandalone32.ActiveCfg = InEditor|Android + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|WindowsStandalone64.ActiveCfg = InEditor|Android + {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Player|WSA.ActiveCfg = InEditor|Android {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Release|Android.ActiveCfg = InEditor|Android {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Release|Any CPU.ActiveCfg = InEditor|Android {15A615C7-33AA-2409-09FE-0B28B0D5143C}.Release|iOS.ActiveCfg = InEditor|Android @@ -189,17 +180,12 @@ Global {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|WSA.ActiveCfg = InEditor|WSA {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.InEditor|WSA.Build.0 = InEditor|WSA - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|Android.ActiveCfg = Player|Android - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|Android.Build.0 = Player|Android - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|Any CPU.ActiveCfg = Player|Android - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|iOS.ActiveCfg = Player|iOS - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|iOS.Build.0 = Player|iOS - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|WSA.ActiveCfg = Player|WSA - {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|WSA.Build.0 = Player|WSA + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|Android.ActiveCfg = InEditor|Android + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|Any CPU.ActiveCfg = InEditor|Android + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|iOS.ActiveCfg = InEditor|Android + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|WindowsStandalone32.ActiveCfg = InEditor|Android + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|WindowsStandalone64.ActiveCfg = InEditor|Android + {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Player|WSA.ActiveCfg = InEditor|Android {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Release|Android.ActiveCfg = InEditor|Android {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Release|Any CPU.ActiveCfg = InEditor|Android {645165C8-1694-74BF-BBEB-8FB0BCFD26F5}.Release|iOS.ActiveCfg = InEditor|Android @@ -223,17 +209,12 @@ Global {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|WSA.ActiveCfg = InEditor|WSA {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.InEditor|WSA.Build.0 = InEditor|WSA - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|Android.ActiveCfg = Player|Android - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|Android.Build.0 = Player|Android - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|Any CPU.ActiveCfg = Player|Android - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|iOS.ActiveCfg = Player|iOS - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|iOS.Build.0 = Player|iOS - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|WSA.ActiveCfg = Player|WSA - {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|WSA.Build.0 = Player|WSA + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|Android.ActiveCfg = InEditor|Android + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|Any CPU.ActiveCfg = InEditor|Android + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|iOS.ActiveCfg = InEditor|Android + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|WindowsStandalone32.ActiveCfg = InEditor|Android + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|WindowsStandalone64.ActiveCfg = InEditor|Android + {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Player|WSA.ActiveCfg = InEditor|Android {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Release|Android.ActiveCfg = InEditor|Android {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Release|Any CPU.ActiveCfg = InEditor|Android {0DF1F49A-50F1-5354-5BF9-9E3DBB6674AD}.Release|iOS.ActiveCfg = InEditor|Android @@ -291,17 +272,12 @@ Global {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WindowsStandalone64.Build.0 = InEditor|WindowsStandalone64 {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WSA.ActiveCfg = InEditor|WSA {6546D776-5B41-65B4-0850-B3667F981C26}.InEditor|WSA.Build.0 = InEditor|WSA - {6546D776-5B41-65B4-0850-B3667F981C26}.Player|Android.ActiveCfg = Player|Android - {6546D776-5B41-65B4-0850-B3667F981C26}.Player|Android.Build.0 = Player|Android - {6546D776-5B41-65B4-0850-B3667F981C26}.Player|Any CPU.ActiveCfg = Player|Android - {6546D776-5B41-65B4-0850-B3667F981C26}.Player|iOS.ActiveCfg = Player|iOS - {6546D776-5B41-65B4-0850-B3667F981C26}.Player|iOS.Build.0 = Player|iOS - {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WindowsStandalone32.ActiveCfg = Player|WindowsStandalone32 - {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WindowsStandalone32.Build.0 = Player|WindowsStandalone32 - {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WindowsStandalone64.ActiveCfg = Player|WindowsStandalone64 - {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WindowsStandalone64.Build.0 = Player|WindowsStandalone64 - {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WSA.ActiveCfg = Player|WSA - {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WSA.Build.0 = Player|WSA + {6546D776-5B41-65B4-0850-B3667F981C26}.Player|Android.ActiveCfg = InEditor|Android + {6546D776-5B41-65B4-0850-B3667F981C26}.Player|Any CPU.ActiveCfg = InEditor|Android + {6546D776-5B41-65B4-0850-B3667F981C26}.Player|iOS.ActiveCfg = InEditor|Android + {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WindowsStandalone32.ActiveCfg = InEditor|Android + {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WindowsStandalone64.ActiveCfg = InEditor|Android + {6546D776-5B41-65B4-0850-B3667F981C26}.Player|WSA.ActiveCfg = InEditor|Android {6546D776-5B41-65B4-0850-B3667F981C26}.Release|Android.ActiveCfg = InEditor|Android {6546D776-5B41-65B4-0850-B3667F981C26}.Release|Any CPU.ActiveCfg = InEditor|Android {6546D776-5B41-65B4-0850-B3667F981C26}.Release|iOS.ActiveCfg = InEditor|Android @@ -343,17 +319,12 @@ Global {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Release|WindowsStandalone64.ActiveCfg = InEditor|Android {4989D6C6-D8B3-4556-B4A9-06093DED68AD}.Release|WSA.ActiveCfg = InEditor|Android {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|Android.ActiveCfg = Debug|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|Android.Build.0 = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|Any CPU.Build.0 = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|iOS.ActiveCfg = Debug|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|iOS.Build.0 = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|WindowsStandalone32.ActiveCfg = Debug|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|WindowsStandalone32.Build.0 = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|WindowsStandalone64.ActiveCfg = Debug|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|WindowsStandalone64.Build.0 = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|WSA.ActiveCfg = Debug|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Debug|WSA.Build.0 = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|Android.ActiveCfg = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|Any CPU.ActiveCfg = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.InEditor|iOS.ActiveCfg = Debug|Any CPU @@ -367,17 +338,12 @@ Global {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WindowsStandalone64.ActiveCfg = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Player|WSA.ActiveCfg = Debug|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|Android.ActiveCfg = Release|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|Android.Build.0 = Release|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|Any CPU.ActiveCfg = Release|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|Any CPU.Build.0 = Release|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|iOS.ActiveCfg = Release|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|iOS.Build.0 = Release|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|WindowsStandalone32.ActiveCfg = Release|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|WindowsStandalone32.Build.0 = Release|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|WindowsStandalone64.ActiveCfg = Release|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|WindowsStandalone64.Build.0 = Release|Any CPU {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|WSA.ActiveCfg = Release|Any CPU - {0D77AB82-D4EB-4034-AC54-4CA04D06906C}.Release|WSA.Build.0 = Release|Any CPU {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Android.ActiveCfg = Debug|Any CPU {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Android.Build.0 = Debug|Any CPU {D36DD91A-2347-4BE3-BDAD-E72898C014BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU From 436c8f0ec8acaf4e5e7891cd66de49b9f3894080 Mon Sep 17 00:00:00 2001 From: Andrei Borodin Date: Thu, 9 Jan 2020 13:25:50 -0800 Subject: [PATCH 18/18] Responding to comments --- .../Editor/ProjectGenerator/Scripts/AssemblyDefinitionInfo.cs | 1 + .../Scripts/Exporters/TemplatedProjectExporter.cs | 4 ++-- .../Scripts/Exporters/TextSolutionFileParser.cs | 4 ++-- .../Editor/ProjectGenerator/Scripts/MSBuildTools.cs | 2 ++ .../Editor/ProjectGenerator/Scripts/UnityProjectInfo.cs | 2 +- 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/AssemblyDefinitionInfo.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/AssemblyDefinitionInfo.cs index 149e10c..1b831a4 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/AssemblyDefinitionInfo.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/AssemblyDefinitionInfo.cs @@ -23,6 +23,7 @@ public class AssemblyDefinitionInfo /// Creates an instance of for the default projects (such as Assembly-CSharp) /// /// The Unity assembly reference. + /// The guid for this assembly reference. /// A new instance. public static AssemblyDefinitionInfo GetDefaultAssemblyCSharpInfo(Assembly assembly, Guid guid) { diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs index b9abdfd..21cbe21 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TemplatedProjectExporter.cs @@ -257,7 +257,7 @@ public void ExportSolution(UnityProjectInfo unityProjectInfo, MSBuildToolsConfig ProcessSolutionFolders(rootTemplatePart, rootReplacementSet, folderNestedItems, generatedItems, solutionFileInfo); // Process Solution file configurations - SortedDictionary> configPlatformMap = GetSolutuonConfigurationPlatformMap(unityProjectInfo, solutionFileInfo); + SortedDictionary> configPlatformMap = GetSolutionConfigurationPlatformMap(unityProjectInfo, solutionFileInfo); ProcessSolutionConfigurationPlatform(rootTemplatePart, rootReplacementSet, configPlatformMap); // Process Configurations Mappings @@ -509,7 +509,7 @@ void WriteSolutionProperty(string key, string value) } } - private SortedDictionary> GetSolutuonConfigurationPlatformMap(UnityProjectInfo unityProjectInfo, SolutionFileInfo solutionFileInfo) + private SortedDictionary> GetSolutionConfigurationPlatformMap(UnityProjectInfo unityProjectInfo, SolutionFileInfo solutionFileInfo) { SortedDictionary> configPlatformMap = new SortedDictionary>(); diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TextSolutionFileParser.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TextSolutionFileParser.cs index da20141..b1a2ae8 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TextSolutionFileParser.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/Exporters/TextSolutionFileParser.cs @@ -1,5 +1,5 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See LICENSE in the project root for license information. +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. #if UNITY_EDITOR diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/MSBuildTools.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/MSBuildTools.cs index 64e434c..ee344d1 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/MSBuildTools.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/MSBuildTools.cs @@ -131,6 +131,8 @@ private static Guid EnsureGuid(ref string field, ref bool needToSave) { guid = Guid.NewGuid(); field = guid.ToString(); + + needToSave = true; } return guid; diff --git a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/UnityProjectInfo.cs b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/UnityProjectInfo.cs index 325209d..e97e3aa 100644 --- a/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/UnityProjectInfo.cs +++ b/Source/MSBuildTools.Unity/Packages/com.microsoft.msbuildforunity/Editor/ProjectGenerator/Scripts/UnityProjectInfo.cs @@ -178,7 +178,7 @@ private Dictionary CreateUnityProjects(MSBuildToolsConfig guid = config.AssemblyCSharpFirstPassEditorGuid; break; default: - throw new InvalidOperationException($"Predefined assembly '{assemblyDefinitionInfo.Name}' was not recognized, this generally means it should be added to the switch statement in CSProjectInfo:GetProjectType. Treating is as a PredefinedAssembly instead of PredefinedEditorAssembly."); + throw new InvalidOperationException($"Predefined assembly '{assemblyDefinitionInfo.Name}' was not recognized, this generally means it should be added to the switch statement in CSProjectInfo:GetProjectType."); } assemblyDefinitionInfo = AssemblyDefinitionInfo.GetDefaultAssemblyCSharpInfo(pair.Value, guid);