Skip to content

Commit

Permalink
Add all values for Platform to the solution (#69)
Browse files Browse the repository at this point in the history
* Add all values for Platform to the solution
* Don't actually add projects to build if they are not configured for each combination
  • Loading branch information
jeffkl authored Oct 24, 2019
1 parent 265ef7f commit 4611298
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 29 deletions.
5 changes: 3 additions & 2 deletions src/SlnGen.Build.Tasks.UnitTests/SlnFileTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,10 @@ private void ValidateProjectInSolution(Action<SlnProject, ProjectInSolution> cus
projectInSolution.ProjectGuid.ShouldBe(slnProject.ProjectGuid.ToSolutionString());
projectInSolution.ProjectName.ShouldBe(slnProject.Name);

IEnumerable<string> configurationPlatforms = from configuration in slnProject.Configurations from platform in slnProject.Platforms select $"{configuration}|{platform}";
IEnumerable<string> expected = slnProject.Configurations.SelectMany(configuration => slnProject.Platforms, (configuration, platform) => $"{configuration}|{platform}");
IEnumerable<string> actual = projectInSolution.ProjectConfigurations.Where(i => i.Value.IncludeInBuild).Select(i => i.Key);

configurationPlatforms.ShouldBe(projectInSolution.ProjectConfigurations.Keys, ignoreOrder: true);
expected.ShouldBe(actual, ignoreOrder: true);

customValidator?.Invoke(slnProject, projectInSolution);
}
Expand Down
4 changes: 2 additions & 2 deletions src/SlnGen.Build.Tasks.UnitTests/SlnProjectTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public void ConfigurationsAndPlatforms()

slnProject.Configurations.ShouldBe(new[] { "Debug", "Release" }, ignoreOrder: true);

slnProject.Platforms.ShouldBe(new[] { "amd64", "AnyCPU", "x64" }, ignoreOrder: true);
slnProject.Platforms.ShouldBe(new[] { "amd64", "Any CPU", "x64" }, ignoreOrder: true);
}
}

Expand All @@ -49,7 +49,7 @@ public void ConfigurationsAndPlatformsWithGlobalProperties()

slnProject.Configurations.ShouldBe(new[] { "Debug", "Mix", "Release" }, ignoreOrder: true);

slnProject.Platforms.ShouldBe(new[] { "amd64", "AnyCPU", "x86", "x64" }, ignoreOrder: true);
slnProject.Platforms.ShouldBe(new[] { "amd64", "Any CPU", "x86", "x64" }, ignoreOrder: true);
}
}

Expand Down
18 changes: 11 additions & 7 deletions src/SlnGen.Build.Tasks/Internal/SlnFile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -148,12 +148,12 @@ public void Save(TextWriter writer, bool useFolders)

writer.WriteLine(" GlobalSection(SolutionConfigurationPlatforms) = preSolution");

IEnumerable<string> globalConfigurations = new HashSet<string>(_projects.SelectMany(p => p.Configurations)).Distinct();
IEnumerable<string> globalPlatforms = new HashSet<string>(_projects.SelectMany(p => p.Platforms)).Distinct().ToList();
HashSet<string> allPlatforms = new HashSet<string>(_projects.SelectMany(i => i.Platforms).OrderBy(i => i), StringComparer.OrdinalIgnoreCase);
HashSet<string> allConfigurations = new HashSet<string>(_projects.SelectMany(i => i.Configurations), StringComparer.OrdinalIgnoreCase);

foreach (string configuration in globalConfigurations)
foreach (string configuration in allConfigurations)
{
foreach (string platform in globalPlatforms)
foreach (string platform in allPlatforms)
{
if (!string.IsNullOrWhiteSpace(configuration) && !string.IsNullOrWhiteSpace(platform))
{
Expand All @@ -167,14 +167,18 @@ public void Save(TextWriter writer, bool useFolders)
writer.WriteLine(" GlobalSection(ProjectConfigurationPlatforms) = preSolution");
foreach (SlnProject project in _projects)
{
foreach (string configuration in project.Configurations)
foreach (string configuration in allConfigurations)
{
foreach (string platform in project.Platforms)
foreach (string platform in allPlatforms)
{
if (!string.IsNullOrWhiteSpace(configuration) && !string.IsNullOrWhiteSpace(platform))
{
writer.WriteLine($@" {project.ProjectGuid.ToSolutionString()}.{configuration}|{platform}.ActiveCfg = {configuration}|{platform}");
writer.WriteLine($@" {project.ProjectGuid.ToSolutionString()}.{configuration}|{platform}.Build.0 = {configuration}|{platform}");
if (project.Configurations.Contains(configuration) && project.Platforms.Contains(platform))
{
writer.WriteLine($@" {project.ProjectGuid.ToSolutionString()}.{configuration}|{platform}.Build.0 = {configuration}|{platform}");
}

if (project.IsDeployable)
{
writer.WriteLine($@" {project.ProjectGuid.ToSolutionString()}.{configuration}|{platform}.Deploy.0 = {configuration}|{platform}");
Expand Down
38 changes: 21 additions & 17 deletions src/SlnGen.Build.Tasks/Internal/SlnProject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,11 @@ public SlnProject([NotNull] string fullPath, [NotNull] string name, Guid project
ProjectTypeGuid = projectTypeGuid;
IsDeployable = isDeployable;
IsMainProject = isMainProject;
Configurations = configurations;
Platforms = platforms;
Configurations = new HashSet<string>(configurations, StringComparer.OrdinalIgnoreCase);
Platforms = new HashSet<string>(platforms, StringComparer.OrdinalIgnoreCase);
}

public IEnumerable<string> Configurations { get; }
public HashSet<string> Configurations { get; }

public string FullPath { get; }

Expand All @@ -75,7 +75,7 @@ public SlnProject([NotNull] string fullPath, [NotNull] string name, Guid project

public string Name { get; }

public IEnumerable<string> Platforms { get; }
public HashSet<string> Platforms { get; }

public Guid ProjectGuid { get; }

Expand Down Expand Up @@ -103,7 +103,7 @@ public static SlnProject FromProject([NotNull] Project project, [NotNull] IReadO
Guid projectTypeGuid = GetKnownProjectTypeGuid(extension, isUsingMicrosoftNetSdk, customProjectTypeGuids);

IEnumerable<string> configurations = project.GetPossiblePropertyValuesOrDefault("Configuration", "Debug");
IEnumerable<string> platforms = project.GetPossiblePropertyValuesOrDefault("Platform", "AnyCPU");
IEnumerable<string> platforms = GetPlatforms(project);

Guid projectGuid = Guid.NewGuid();

Expand All @@ -114,18 +114,7 @@ public static SlnProject FromProject([NotNull] Project project, [NotNull] IReadO

string isDeployableStr = project.GetPropertyValue("SlnGenIsDeployable");

bool isDeployable = false;

string projectFileExtension = Path.GetExtension(project.FullPath);

if (string.IsNullOrWhiteSpace(isDeployableStr) && !string.IsNullOrWhiteSpace(projectFileExtension) && projectFileExtension.Equals(".sfproj", StringComparison.OrdinalIgnoreCase))
{
isDeployable = true;
}
else
{
isDeployable = isDeployableStr.Equals("true", StringComparison.OrdinalIgnoreCase);
}
bool isDeployable = isDeployableStr.Equals("true", StringComparison.OrdinalIgnoreCase) || (string.IsNullOrWhiteSpace(isDeployableStr) && string.Equals(Path.GetExtension(project.FullPath), ".sfproj", StringComparison.OrdinalIgnoreCase));

return new SlnProject(project.FullPath, name, projectGuid, projectTypeGuid, configurations, platforms, isMainProject, isDeployable);
}
Expand Down Expand Up @@ -158,5 +147,20 @@ internal static Guid GetKnownProjectTypeGuid(string extension, bool isUsingMicro

return projectTypeGuid;
}

private static IEnumerable<string> GetPlatforms(Project project)
{
foreach (string platform in project.GetPossiblePropertyValuesOrDefault("Platform", "Any CPU"))
{
if (string.Equals(platform, "AnyCPU", StringComparison.OrdinalIgnoreCase))
{
yield return "Any CPU";
}
else
{
yield return platform;
}
}
}
}
}
2 changes: 1 addition & 1 deletion src/SlnGen.Build.Tasks/SlnGen.Build.Tasks.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<ArtifactsPath>..\..\artifacts\$(MSBuildProjectName)</ArtifactsPath>
<CopyArtifactsAfterTargets>Pack</CopyArtifactsAfterTargets>
<DefaultArtifactsFileMatch>*nupkg</DefaultArtifactsFileMatch>
<NoWarn>$(NoWarn);SA0001</NoWarn>
<NoWarn>$(NoWarn);SA0001;NU5128</NoWarn>
</PropertyGroup>

<PropertyGroup Label="Package properties">
Expand Down

0 comments on commit 4611298

Please sign in to comment.