@@ -16,13 +16,17 @@ public class SaveSolutionCommand {
1616 private readonly string _solutionFileName ;
1717 private readonly string _visualStudioVersion ;
1818 private readonly SolutionViewModel _solution ;
19+ private readonly IVisualStudioInstallation _visualStudioInstallation ;
1920
2021 public SaveSolutionCommand ( ISettings settings , IVisualStudioInstallationsProvider visualStudioInstallationsProvider , string solutionFileName , string visualStudioVersion , SolutionViewModel solution ) {
2122 _settings = settings ;
2223 _visualStudioInstallationsProvider = visualStudioInstallationsProvider ;
2324 _solutionFileName = solutionFileName ;
2425 _visualStudioVersion = visualStudioVersion ;
2526 _solution = solution ;
27+
28+ _visualStudioInstallation = _visualStudioInstallationsProvider . GetVisualStudioInstallationByVersionId ( _visualStudioVersion )
29+ ?? _visualStudioInstallationsProvider . GetMostRecentVisualStudioInstallation ( ) ;
2630 }
2731
2832 public void Execute ( ) {
@@ -46,11 +50,14 @@ public void Execute() {
4650 }
4751
4852 writer . WriteLine ( "Global" ) ;
49- WriteTfsInformation ( writer , projects ) ;
50- WriteSolutionConfigurationPlatforms ( writer , projects ) ;
51- WriteProjectConfigurationPlatforms ( writer , projects ) ;
53+ if ( projects . Any ( ) ) {
54+ WriteTfsInformation ( writer , projects ) ;
55+ WriteSolutionConfigurationPlatforms ( writer , projects ) ;
56+ WriteProjectConfigurationPlatforms ( writer , projects ) ;
57+ }
5258 WriteSolutionProperties ( writer ) ;
5359 WriteNestedProjects ( writer ) ;
60+ WriteExtensibilityGlobals ( writer ) ;
5461 writer . WriteLine ( "EndGlobal" ) ;
5562
5663 _solution . IsDirty = false ;
@@ -90,15 +97,12 @@ private void WriteSolutionProperties(TextWriter writer) {
9097 }
9198
9299 private void WriteHeader ( TextWriter writer ) {
93- var installation =
94- _visualStudioInstallationsProvider . GetVisualStudioInstallationByVersionId ( _visualStudioVersion )
95- ?? _visualStudioInstallationsProvider . GetMostRecentVisualStudioInstallation ( ) ;
96-
97100 writer . WriteLine ( ) ;
98- writer . WriteLine ( $ "Microsoft Visual Studio Solution File, Format Version { installation . SolutionFileVersion } ") ;
99- writer . WriteLine ( $ "# { installation . Name } ") ;
100- if ( ! string . IsNullOrEmpty ( installation . SolutionVisualStudioVersion ) ) {
101- writer . WriteLine ( $ "VisualStudioVersion = { installation . SolutionVisualStudioVersion } ") ;
101+ writer . WriteLine ( $ "Microsoft Visual Studio Solution File, Format Version { _visualStudioInstallation . SolutionFileVersion } ") ;
102+ writer . WriteLine ( $ "# { _visualStudioInstallation . SolutionComment } ") ;
103+ if ( ! string . IsNullOrEmpty ( _visualStudioInstallation . SolutionVisualStudioVersion ) ) {
104+ writer . WriteLine ( $ "VisualStudioVersion = { _visualStudioInstallation . SolutionVisualStudioVersion } ") ;
105+ writer . WriteLine ( "MinimumVisualStudioVersion = 10.0.40219.1" ) ;
102106 }
103107 }
104108
@@ -118,6 +122,14 @@ private void WriteNestedProjects(TextWriter writer) {
118122 writer . WriteLine ( "\t EndGlobalSection" ) ;
119123 }
120124
125+ private void WriteExtensibilityGlobals ( TextWriter writer ) {
126+ if ( _visualStudioInstallation is VisualStudio2017AndFollowingInstallation ) {
127+ writer . WriteLine ( "\t GlobalSection(ExtensibilityGlobals) = postSolution" ) ;
128+ writer . WriteLine ( $ "\t \t SolutionGuid = { _solution . SolutionId . ToString ( "B" ) . ToUpperInvariant ( ) } ") ;
129+ writer . WriteLine ( "\t EndGlobalSection" ) ;
130+ }
131+ }
132+
121133 private void WriteTfsInformation ( TextWriter writer , ICollection < SolutionProject > projects ) {
122134 if ( ! _solution . IsSccBound ) {
123135 return ;
0 commit comments