Skip to content

Commit 9442ae3

Browse files
committed
upgraded to .net 9
1 parent 857d9af commit 9442ae3

30 files changed

+1364
-1043
lines changed

.editorconfig

Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
###############################
2+
# PandaTech Editor Config #
3+
###############################
4+
5+
6+
################################
7+
# ReSharper Generated Settings #
8+
################################
9+
10+
[*]
11+
charset = utf-8-bom
12+
end_of_line = crlf
13+
trim_trailing_whitespace = false
14+
insert_final_newline = false
15+
indent_style = space
16+
indent_size = 4
17+
18+
# Microsoft .NET properties
19+
csharp_preferred_modifier_order = public, private, protected, internal, file, new, static, abstract, virtual, sealed, readonly, override, extern, unsafe, volatile, async, required:suggestion
20+
csharp_style_prefer_utf8_string_literals = true:suggestion
21+
csharp_style_var_elsewhere = true:suggestion
22+
csharp_style_var_for_built_in_types = true:suggestion
23+
csharp_style_var_when_type_is_apparent = true:suggestion
24+
dotnet_naming_rule.unity_serialized_field_rule.import_to_resharper = True
25+
dotnet_naming_rule.unity_serialized_field_rule.resharper_description = Unity serialized field
26+
dotnet_naming_rule.unity_serialized_field_rule.resharper_guid = 5f0fdb63-c892-4d2c-9324-15c80b22a7ef
27+
dotnet_naming_rule.unity_serialized_field_rule.severity = warning
28+
dotnet_naming_rule.unity_serialized_field_rule.style = lower_camel_case_style
29+
dotnet_naming_rule.unity_serialized_field_rule.symbols = unity_serialized_field_symbols
30+
dotnet_naming_style.lower_camel_case_style.capitalization = camel_case
31+
dotnet_naming_symbols.unity_serialized_field_symbols.applicable_accessibilities = *
32+
dotnet_naming_symbols.unity_serialized_field_symbols.applicable_kinds =
33+
dotnet_naming_symbols.unity_serialized_field_symbols.resharper_applicable_kinds = unity_serialised_field
34+
dotnet_naming_symbols.unity_serialized_field_symbols.resharper_required_modifiers = instance
35+
dotnet_style_parentheses_in_arithmetic_binary_operators = never_if_unnecessary:none
36+
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:none
37+
dotnet_style_parentheses_in_relational_binary_operators = never_if_unnecessary:none
38+
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
39+
dotnet_style_predefined_type_for_member_access = true:suggestion
40+
dotnet_style_qualification_for_event = false:suggestion
41+
dotnet_style_qualification_for_field = false:suggestion
42+
dotnet_style_qualification_for_method = false:suggestion
43+
dotnet_style_qualification_for_property = false:suggestion
44+
dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion
45+
46+
# ReSharper properties
47+
resharper_align_linq_query = true
48+
resharper_align_multiline_calls_chain = true
49+
resharper_apply_auto_detected_rules = false
50+
resharper_braces_for_for = required
51+
resharper_braces_for_foreach = required
52+
resharper_braces_for_ifelse = required
53+
resharper_braces_for_while = required
54+
resharper_cpp_insert_final_newline = true
55+
resharper_csharp_indent_size = 3
56+
resharper_csharp_max_enum_members_on_line = 0
57+
resharper_csharp_tab_width = 3
58+
resharper_csharp_wrap_arguments_style = chop_if_long
59+
resharper_csharp_wrap_parameters_style = chop_if_long
60+
resharper_formatter_off_tag = @formatter:off
61+
resharper_formatter_on_tag = @formatter:on
62+
resharper_formatter_tags_enabled = true
63+
resharper_keep_existing_declaration_parens_arrangement = false
64+
resharper_keep_existing_expr_member_arrangement = false
65+
resharper_keep_existing_initializer_arrangement = false
66+
resharper_keep_existing_switch_expression_arrangement = false
67+
resharper_max_array_initializer_elements_on_line = 0
68+
resharper_max_initializer_elements_on_line = 0
69+
resharper_place_accessorholder_attribute_on_same_line = false
70+
resharper_place_accessor_attribute_on_same_line = false
71+
resharper_place_field_attribute_on_same_line = false
72+
resharper_place_simple_anonymousmethod_on_single_line = false
73+
resharper_place_simple_embedded_statement_on_same_line = false
74+
resharper_place_simple_initializer_on_single_line = false
75+
resharper_place_simple_property_pattern_on_single_line = false
76+
resharper_use_indent_from_vs = false
77+
resharper_wrap_after_property_in_chained_method_calls = true
78+
resharper_wrap_array_initializer_style = chop_if_long
79+
resharper_wrap_chained_method_calls = chop_always
80+
resharper_wrap_linq_expressions = chop_always
81+
resharper_wrap_list_pattern = chop_if_long
82+
resharper_wrap_object_and_collection_initializer_style = chop_always
83+
resharper_wrap_property_pattern = chop_always
84+
85+
# ReSharper inspection severities
86+
resharper_arrange_redundant_parentheses_highlighting = hint
87+
resharper_arrange_this_qualifier_highlighting = hint
88+
resharper_arrange_type_member_modifiers_highlighting = hint
89+
resharper_arrange_type_modifiers_highlighting = hint
90+
resharper_built_in_type_reference_style_for_member_access_highlighting = hint
91+
resharper_built_in_type_reference_style_highlighting = hint
92+
resharper_enforce_foreach_statement_braces_highlighting = warning
93+
resharper_enforce_for_statement_braces_highlighting = warning
94+
resharper_enforce_if_statement_braces_highlighting = warning
95+
resharper_enforce_lock_statement_braces_highlighting = warning
96+
resharper_enforce_using_statement_braces_highlighting = warning
97+
resharper_enforce_while_statement_braces_highlighting = warning
98+
resharper_mvc_action_not_resolved_highlighting = warning
99+
resharper_mvc_area_not_resolved_highlighting = warning
100+
resharper_mvc_controller_not_resolved_highlighting = warning
101+
resharper_mvc_masterpage_not_resolved_highlighting = warning
102+
resharper_mvc_partial_view_not_resolved_highlighting = warning
103+
resharper_mvc_template_not_resolved_highlighting = warning
104+
resharper_mvc_view_component_not_resolved_highlighting = warning
105+
resharper_mvc_view_component_view_not_resolved_highlighting = warning
106+
resharper_mvc_view_not_resolved_highlighting = warning
107+
resharper_razor_assembly_not_resolved_highlighting = warning
108+
resharper_redundant_base_qualifier_highlighting = warning
109+
resharper_web_config_module_not_resolved_highlighting = warning
110+
resharper_web_config_type_not_resolved_highlighting = warning
111+
resharper_web_config_wrong_module_highlighting = warning
112+
113+
[{*.har,*.jsb2,*.jsb3,*.json,*.jsonc,*.postman_collection,*.postman_collection.json,*.postman_environment,*.postman_environment.json,.babelrc,.eslintrc,.prettierrc,.stylelintrc,.ws-context,bowerrc,jest.config}]
114+
indent_style = space
115+
indent_size = 2
116+
117+
[{*.yaml,*.yml}]
118+
indent_style = space
119+
indent_size = 2
120+
121+
[*.cs]
122+
indent_style = space
123+
indent_size = 3
124+
tab_width = 3
125+
126+
[*.{appxmanifest,asax,ascx,aspx,axaml,build,c,c++,c++m,cc,ccm,cginc,compute,cp,cpp,cppm,cshtml,cu,cuh,cxx,cxxm,dtd,fs,fsi,fsscript,fsx,fx,fxh,h,hh,hlsl,hlsli,hlslinc,hpp,hxx,inc,inl,ino,ipp,ixx,master,ml,mli,mpp,mq4,mq5,mqh,mxx,nuspec,paml,razor,resw,resx,shader,skin,tpp,usf,ush,uxml,vb,xaml,xamlx,xoml,xsd}]
127+
indent_style = space
128+
indent_size = 4
129+
tab_width = 4
130+
131+
#########################
132+
# Custom added settings #
133+
#########################
134+
[*.cs]
135+
dotnet_diagnostic.cs8600.severity = error #Converting null literal or possible null value to non-nullable type.
136+
dotnet_diagnostic.cs8601.severity = error #Possible null reference assignment.
137+
dotnet_diagnostic.cs8602.severity = error #possible dereference of a null reference
138+
dotnet_diagnostic.cs8603.severity = error #possible null reference return
139+
dotnet_diagnostic.cs8604.severity = error #possible null reference argument for parameter
140+
dotnet_diagnostic.cs8605.severity = error #Unboxing a possibly null value
141+
dotnet_diagnostic.cs8618.severity = error # Non-nullable field is uninitialized. Consider declaring as nullable.
142+
dotnet_diagnostic.cs8625.severity = error # Cannot convert null literal to non-nullable reference type.
143+
dotnet_diagnostic.cs8762.severity = error # Nullability of reference types in type doesn't match overridden member.
144+
dotnet_diagnostic.cs1717.severity = error #variable is assigned to itself
145+
dotnet_diagnostic.cs1718.severity = error #comparison made to same variable
146+
dotnet_diagnostic.cs0659.severity = error #overriding object.Equals but not overriding object.GetHashCode
147+
dotnet_diagnostic.cs0251.severity = error #Indexing an array with a negative index (array indices always start at zero)
148+
dotnet_diagnostic.s3363.severity = none #Never set DateTime as PrimaryKey. Ignored as we never do it but have warnings for cache entities.
149+
dotnet_diagnostic.ca2016.severity = error #Forwarding cancellation tokens
150+
csharp_style_namespace_declarations = file_scoped:error
151+
resharper_entity_framework_model_validation_unlimited_string_length_highlighting = none
152+
153+
154+
#########################
155+
# VS added settings #
156+
#########################
157+
158+
[*.cs]
159+
csharp_style_namespace_declarations = file_scoped:error
160+
csharp_indent_labels = one_less_than_current
161+
csharp_using_directive_placement = outside_namespace:silent
162+
csharp_prefer_simple_using_statement = true:suggestion
163+
csharp_prefer_braces = true:silent
164+
csharp_style_prefer_method_group_conversion = true:silent
165+
csharp_style_prefer_top_level_statements = true:silent
166+
csharp_style_prefer_primary_constructors = true:suggestion
167+
csharp_style_expression_bodied_methods = false:silent
168+
csharp_style_expression_bodied_constructors = false:silent
169+
csharp_style_expression_bodied_operators = false:silent
170+
csharp_style_expression_bodied_properties = true:silent
171+
csharp_style_expression_bodied_indexers = true:silent
172+
csharp_style_expression_bodied_accessors = true:silent
173+
csharp_style_expression_bodied_lambdas = true:silent
174+
csharp_style_expression_bodied_local_functions = false:silent
175+
176+
[{*.yaml,*.yml}]
177+
dotnet_style_namespace_match_folder = true:suggestion
178+
dotnet_style_operator_placement_when_wrapping = beginning_of_line
179+
tab_width = 3
180+
dotnet_style_coalesce_expression = true:suggestion
181+
dotnet_style_null_propagation = true:suggestion
182+
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
183+
dotnet_style_prefer_auto_properties = true:silent
184+
dotnet_style_object_initializer = true:suggestion
185+
dotnet_style_collection_initializer = true:suggestion
186+
dotnet_style_prefer_simplified_boolean_expressions = true:suggestion
187+
dotnet_style_prefer_conditional_expression_over_assignment = true:silent
188+
189+
[*.csv]
190+
indent_style = tab
191+
tab_width = 4

.github/workflows/main.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ jobs:
1616

1717
steps:
1818
- name: Checkout
19-
uses: actions/checkout@v3
19+
uses: actions/checkout@v4
2020

2121
- name: Setup .NET Core
22-
uses: actions/setup-dotnet@v3
22+
uses: actions/setup-dotnet@v4
2323
with:
2424
global-json-file: global.json
2525

FileExporter.sln

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
1515
README.md = README.md
1616
.gitignore = .gitignore
1717
global.json = global.json
18+
.editorconfig = .editorconfig
1819
EndProjectSection
1920
EndProject
2021
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{4459D40A-17C0-4B8D-9F8A-5CBD596EB80E}"

README.md

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
# FileExporter
22

3-
FileExporter is a lightweight C# library that simplifies file export operations in .NET applications. With support for exporting data to CSV, Excel (XLSX), and PDF formats, FileExporter provides an intuitive interface for developers to quickly generate and download files.
3+
FileExporter is a lightweight C# library that simplifies file export operations in .NET applications. With support for
4+
exporting data to CSV, Excel (XLSX), and PDF formats, FileExporter provides an intuitive interface for developers to
5+
quickly generate and download files.
46

57
## Features
68

79
- **Easy Exporting**: Simply call ToCsv(), ToXlsx(), or ToPdf() on your data collection to export to the desired format.
8-
- **Automatic Splitting**: Handles large datasets by automatically splitting files if the maximum line count or file size is exceeded, then zipping them for easy download.
10+
- **Automatic Splitting**: Handles large datasets by automatically splitting files if the maximum line count or file
11+
size is exceeded, then zipping them for easy download.
912
- **Flexible Configuration**: Customize export settings such as column headers, delimiter, and more to suit your needs.
1013
- **Effortless Integration**: Seamlessly integrate FileExporter into your existing .NET projects with minimal setup.
11-
- **Helper Extension Methods**: Use ToFileFormat(ExportType.Excel) as an alternative to directly calling ToCsv(), ToXlsx(), or ToPdf().
14+
- **Helper Extension Methods**: Use ToFileFormat(ExportType.Excel) as an alternative to directly calling ToCsv(),
15+
ToXlsx(), or ToPdf().
1216

1317
## Installation
1418

@@ -38,11 +42,14 @@ var exportedFile = data.ToCsv().ToFile();
3842
// Return the exported file to the caller
3943
return exportedFile;
4044
```
45+
4146
Starting from release 3.3.0, FileExporter supports exporting data using fluent rules.
4247

4348
### Fluent Rules Example
4449

45-
First, create an ExportRule for your model. In the constructor, call GenerateRules() to automatically create default rules based on the model. To customize the setup, use the RuleFor() method to configure specific rules for your model's properties. Here's a quick demonstration:
50+
First, create an ExportRule for your model. In the constructor, call GenerateRules() to automatically create default
51+
rules based on the model. To customize the setup, use the RuleFor() method to configure specific rules for your model's
52+
properties. Here's a quick demonstration:
4653

4754
### Model Example:
4855

@@ -56,6 +63,7 @@ public class FileData
5663
public string? Comment { get; set; }
5764
}
5865
```
66+
5967
### Export Rule Example:
6068

6169
This sample includes two constructors, one with a default name and one with a custom name.
@@ -95,6 +103,7 @@ public class FileDataExportRule : ExportRule<FileData>
95103
}
96104
}
97105
```
106+
98107
If a property is incorrectly set up, an InvalidPropertyNameException will be thrown with a relevant message.
99108

100109
### Controller Example:
@@ -122,6 +131,7 @@ namespace FileExporter.Demo.Controllers
122131
}
123132
}
124133
```
134+
125135
You can also export data to Excel (XLSX) or PDF formats by calling ToXlsx() or ToPdf() respectively.
126136

127137
## Contributing

global.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"sdk": {
3-
"version": "8.0.200",
4-
"rollForward": "latestMajor"
3+
"version": "9.0.100",
4+
"rollForward": "latestMinor"
55
}
66
}

src/FileExporter/Dtos/ExportFile.cs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,15 @@ namespace FileExporter.Dtos;
44

55
public class ExportFile(string name, MimeTypes mimeType, byte[] data)
66
{
7-
public string Name { get; set; } = name + mimeType.Extension;
8-
public MimeTypes Type { get; set; } = mimeType;
9-
public byte[] Data { get; set; } = data;
7+
public string Name { get; set; } = name + mimeType.Extension;
8+
public MimeTypes Type { get; set; } = mimeType;
9+
public byte[] Data { get; set; } = data;
1010

11-
public FileContentResult ToFile() => new(Data, Type) { FileDownloadName = Name };
11+
public FileContentResult ToFile()
12+
{
13+
return new FileContentResult(Data, Type)
14+
{
15+
FileDownloadName = Name
16+
};
17+
}
1218
}

src/FileExporter/Dtos/MimeTypes.cs

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,30 @@
22

33
public class MimeTypes
44
{
5-
public string Value { get; init; }
6-
public string Extension { get; init; }
5+
public static readonly MimeTypes Csv = new("application/csv", ".csv");
6+
public static readonly MimeTypes Pdf = new("application/pdf", ".pdf");
77

8-
private MimeTypes(string value, string fileExtension)
9-
{
10-
Value = value;
11-
Extension = fileExtension;
12-
}
8+
public static readonly MimeTypes Xlsx = new("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
9+
".xlsx");
1310

14-
public static implicit operator string(MimeTypes mimeType) => mimeType.Value;
11+
public static readonly MimeTypes Zip = new("application/zip", ".zip");
1512

16-
public override string ToString() => Value;
13+
private MimeTypes(string value, string fileExtension)
14+
{
15+
Value = value;
16+
Extension = fileExtension;
17+
}
1718

18-
public static readonly MimeTypes Csv = new("application/csv", ".csv");
19-
public static readonly MimeTypes Pdf = new("application/pdf", ".pdf");
20-
public static readonly MimeTypes Xlsx = new("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", ".xlsx");
21-
public static readonly MimeTypes Zip = new("application/zip", ".zip");
19+
public string Value { get; init; }
20+
public string Extension { get; init; }
21+
22+
public static implicit operator string(MimeTypes mimeType)
23+
{
24+
return mimeType.Value;
25+
}
26+
27+
public override string ToString()
28+
{
29+
return Value;
30+
}
2231
}

src/FileExporter/Dtos/PropertyData.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ namespace FileExporter.Dtos;
44

55
internal class PropertyData
66
{
7-
public PropertyInfo Property { get; internal set; }
8-
public bool HasBaseConverter { get; internal set; }
9-
public string Name { get; internal set; }
7+
public required PropertyInfo Property { get; internal set; }
8+
public bool HasBaseConverter { get; internal set; }
9+
public required string Name { get; internal set; }
1010
}

src/FileExporter/Enums/ExportType.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
public enum ExportType
44
{
5-
Xlsx = 1,
6-
Csv = 2,
7-
Pdf = 3
5+
Xlsx = 1,
6+
Csv = 2,
7+
Pdf = 3
88
}

src/FileExporter/Exceptions/InvalidPropertyNameException.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
namespace FileExporter.Exceptions;
44

5-
public class InvalidPropertyNameException(string message) : Exception(message);
5+
public class InvalidPropertyNameException(string message) : Exception(message);

0 commit comments

Comments
 (0)