22using OfficeOpenXml ;
33using OfficeOpenXml . Style ;
44
5+ // ReSharper disable SwitchStatementMissingSomeEnumCasesNoDefault
56// ReSharper disable InvertIf
67// ReSharper disable SuggestBaseTypeForParameter
78namespace Atc . CodingRules . Updater . CLI ;
@@ -89,6 +90,8 @@ private static void HandleEditorConfigFiles(
8990 logger . LogInformation ( $ "{ AppEmojisConstants . AreaEditorConfig } Working on EditorConfig files") ;
9091
9192 var rawCodingRulesDistributionProjectTargetBaseUrl = $ "{ RawCodingRulesDistributionBaseUrl } /{ options . ProjectTarget . ToStringLowerCase ( ) } ";
93+ const string projectFrameworkCodingRulesBaseUrl = $ "{ RawCodingRulesDistributionBaseUrl } /project-frameworks";
94+
9295 EditorConfigHelper . HandleFile ( logger , "root" , rawCodingRulesDistributionProjectTargetBaseUrl , projectPath , string . Empty ) ;
9396
9497 foreach ( var item in options . Mappings . Sample . Paths )
@@ -108,6 +111,66 @@ private static void HandleEditorConfigFiles(
108111 var path = new DirectoryInfo ( item ) ;
109112 EditorConfigHelper . HandleFile ( logger , "test" , rawCodingRulesDistributionProjectTargetBaseUrl , path , "test" ) ;
110113 }
114+
115+ // Handle Project specific Frameworks
116+ var projectsInProjectPath = DotnetCsProjFileHelper . FindAllInPathAndPredictProjectTypes ( projectPath ) ;
117+
118+ foreach ( var ( csProjFile , projectType ) in projectsInProjectPath )
119+ {
120+ var projectFrameworkType = DetermineProjectFrameworkType ( options , csProjFile , projectType ) ;
121+ if ( projectFrameworkType == ProjectFrameworkType . None )
122+ {
123+ continue ;
124+ }
125+
126+ EditorConfigHelper . HandleFile ( logger , "ProjectFramework" , projectFrameworkCodingRulesBaseUrl , csProjFile . Directory ! , projectFrameworkType . ToStringLowerCase ( ) ) ;
127+ }
128+ }
129+
130+ private static ProjectFrameworkType DetermineProjectFrameworkType (
131+ OptionsFile options ,
132+ FileInfo csProjFile ,
133+ DotnetProjectType projectType )
134+ {
135+ var projectFrameworkType = ProjectFrameworkType . None ;
136+
137+ var optionsProjectFrameworkMapping = options . ProjectFrameworkMappings . FirstOrDefault (
138+ x => x . Name . Equals (
139+ Path . GetFileNameWithoutExtension ( csProjFile . Name ) ,
140+ StringComparison . OrdinalIgnoreCase ) ) ;
141+
142+ if ( optionsProjectFrameworkMapping is not null )
143+ {
144+ projectFrameworkType = optionsProjectFrameworkMapping . Type ;
145+ }
146+ else
147+ {
148+ switch ( projectType )
149+ {
150+ case DotnetProjectType . AzureFunctionApp :
151+ projectFrameworkType = ProjectFrameworkType . AzureFunctions ;
152+ break ;
153+ case DotnetProjectType . BlazorServerApp :
154+ case DotnetProjectType . BlazorWAsmApp :
155+ projectFrameworkType = ProjectFrameworkType . Blazor ;
156+ break ;
157+ case DotnetProjectType . MauiApp :
158+ projectFrameworkType = ProjectFrameworkType . Maui ;
159+ break ;
160+ case DotnetProjectType . WinFormApp :
161+ projectFrameworkType = ProjectFrameworkType . WinForms ;
162+ break ;
163+ case DotnetProjectType . WpfApp :
164+ case DotnetProjectType . WpfLibrary :
165+ projectFrameworkType = ProjectFrameworkType . Wpf ;
166+ break ;
167+ case DotnetProjectType . WebApi :
168+ projectFrameworkType = ProjectFrameworkType . WebApi ;
169+ break ;
170+ }
171+ }
172+
173+ return projectFrameworkType ;
111174 }
112175
113176 private static void HandleDirectoryBuildPropsFiles (
0 commit comments