Merge branch '2-prepare-release-of-1-1-0' into 'main'
Resolve "Prepare release of 1.1.0" Closes #2 See merge request open-source/dotnet/csv-metrics-logger!2
This commit is contained in:
commit
6e42881fdb
@ -10,9 +10,9 @@
|
|||||||
|
|
||||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
<IncludeBuildOutput>false</IncludeBuildOutput> <!-- Do not include build output in the package. Necessary for analyzers. -->
|
<IncludeBuildOutput>false</IncludeBuildOutput> <!-- Do not include build output in the package. Necessary for analyzers. -->
|
||||||
<AssemblyVersion>1.0.0</AssemblyVersion>
|
<AssemblyVersion>1.1.0</AssemblyVersion>
|
||||||
<FileVersion>1.0.0</FileVersion>
|
<FileVersion>1.1.0</FileVersion>
|
||||||
<PackageVersion>1.0.0</PackageVersion>
|
<PackageVersion>1.1.0</PackageVersion>
|
||||||
<Authors>Thorsten Sommer</Authors>
|
<Authors>Thorsten Sommer</Authors>
|
||||||
<PackageProjectUrl>https://devops.tsommer.org/open-source/dotnet/csv-metrics-logger</PackageProjectUrl>
|
<PackageProjectUrl>https://devops.tsommer.org/open-source/dotnet/csv-metrics-logger</PackageProjectUrl>
|
||||||
<RepositoryUrl>https://devops.tsommer.org/open-source/dotnet/csv-metrics-logger</RepositoryUrl>
|
<RepositoryUrl>https://devops.tsommer.org/open-source/dotnet/csv-metrics-logger</RepositoryUrl>
|
||||||
|
@ -18,7 +18,7 @@ List<TestData> testData =
|
|||||||
];
|
];
|
||||||
|
|
||||||
var filename = Path.GetTempFileName();
|
var filename = Path.GetTempFileName();
|
||||||
await using var storage = CSVStorage<TestData>.Create(fileName);
|
await using var storage = CSVStorage<TestData>.Create(filename);
|
||||||
|
|
||||||
foreach (var data in testData)
|
foreach (var data in testData)
|
||||||
storage.Write(data);
|
storage.Write(data);
|
||||||
@ -26,13 +26,37 @@ foreach (var data in testData)
|
|||||||
|
|
||||||
You might use `storage.Write` from multiple threads. The logger will handle the synchronization for you.
|
You might use `storage.Write` from multiple threads. The logger will handle the synchronization for you.
|
||||||
|
|
||||||
CSV Metrics Logger uses a source generator. You have to use the following NuGet packages:
|
CSV Metrics Logger uses a source generator. You need to use the following NuGet packages:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<PackageReference Include="CSVMetricsLoggerGenerator" Version="1.0.0" />
|
<PackageReference Include="CSVMetricsLoggerGenerator" Version="1.1.0" />
|
||||||
<PackageReference Include="CSVMetricsLogger" Version="1.0.0" />
|
<PackageReference Include="CSVMetricsLogger" Version="1.1.0" />
|
||||||
```
|
```
|
||||||
|
|
||||||
Your data must be modeled as a structure; classes are not supported. It does not matter if you are using a (readonly) record struct or a regular struct. The only requirement is that the struct must be a partial struct. The source generator will generate the missing part of the struct for you. Each public property will be used as a column in the CSV file. The property type might be any type, as long as it supports the `ToString(CultureInfo)` method.
|
Your data must be modeled as a structure; classes are not supported. It does not matter if you are using a (readonly) record struct or a regular struct. The only requirement is that the struct must be a partial struct. The source generator will generate the missing part of the struct for you. Each public property will be used as a column in the CSV file. The property type can be any type, as long as it supports the ToString() method.
|
||||||
|
|
||||||
|
Additionally, you can use generic type parameters in your struct, as long as there is a suitable ToString() overload. Here is an example:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
using CSV_Metrics_Logger;
|
||||||
|
|
||||||
|
[CSVRecord]
|
||||||
|
public readonly partial record struct GenericTestData<TNum>(string Name, sbyte Age, TNum Measure) where TNum : IFloatingPointIeee754<TNum>;
|
||||||
|
|
||||||
|
List<TestData> testData =
|
||||||
|
[
|
||||||
|
new TestData<float>("Name 1", 14, 47.53f),
|
||||||
|
new TestData<float>("Name 2", 25, 19.84f),
|
||||||
|
new TestData<float>("Name 3", 36, 38.78f),
|
||||||
|
new TestData<float>("Name 4", 47, 17.25f),
|
||||||
|
new TestData<float>("Name 5", 58, 73.89f),
|
||||||
|
];
|
||||||
|
|
||||||
|
var filename = Path.GetTempFileName();
|
||||||
|
await using var storage = CSVStorage<TestData<float>>.Create(filename);
|
||||||
|
|
||||||
|
foreach (var data in testData)
|
||||||
|
storage.Write(data);
|
||||||
|
```
|
||||||
|
|
||||||
For each data structure, you create a CSVStorage instance. The CSVStorage instance is a disposable object. You must dispose of it when you are done with it. When the CSV file already exists, the CSVStorage object will append data to the existing file; the header will not be written again.
|
For each data structure, you create a CSVStorage instance. The CSVStorage instance is a disposable object. You must dispose of it when you are done with it. When the CSV file already exists, the CSVStorage object will append data to the existing file; the header will not be written again.
|
@ -9,9 +9,9 @@
|
|||||||
<WarningsAsErrors>CS8600;CS8602;CS8603</WarningsAsErrors>
|
<WarningsAsErrors>CS8600;CS8602;CS8603</WarningsAsErrors>
|
||||||
|
|
||||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
<AssemblyVersion>1.0.0</AssemblyVersion>
|
<AssemblyVersion>1.1.0</AssemblyVersion>
|
||||||
<FileVersion>1.0.0</FileVersion>
|
<FileVersion>1.1.0</FileVersion>
|
||||||
<PackageVersion>1.0.0</PackageVersion>
|
<PackageVersion>1.1.0</PackageVersion>
|
||||||
<Authors>Thorsten Sommer</Authors>
|
<Authors>Thorsten Sommer</Authors>
|
||||||
<PackageProjectUrl>https://devops.tsommer.org/open-source/dotnet/csv-metrics-logger</PackageProjectUrl>
|
<PackageProjectUrl>https://devops.tsommer.org/open-source/dotnet/csv-metrics-logger</PackageProjectUrl>
|
||||||
<RepositoryUrl>https://devops.tsommer.org/open-source/dotnet/csv-metrics-logger</RepositoryUrl>
|
<RepositoryUrl>https://devops.tsommer.org/open-source/dotnet/csv-metrics-logger</RepositoryUrl>
|
||||||
|
@ -18,7 +18,7 @@ List<TestData> testData =
|
|||||||
];
|
];
|
||||||
|
|
||||||
var filename = Path.GetTempFileName();
|
var filename = Path.GetTempFileName();
|
||||||
await using var storage = CSVStorage<TestData>.Create(fileName);
|
await using var storage = CSVStorage<TestData>.Create(filename);
|
||||||
|
|
||||||
foreach (var data in testData)
|
foreach (var data in testData)
|
||||||
storage.Write(data);
|
storage.Write(data);
|
||||||
@ -26,13 +26,37 @@ foreach (var data in testData)
|
|||||||
|
|
||||||
You might use `storage.Write` from multiple threads. The logger will handle the synchronization for you.
|
You might use `storage.Write` from multiple threads. The logger will handle the synchronization for you.
|
||||||
|
|
||||||
CSV Metrics Logger uses a source generator. You have to use the following NuGet packages:
|
CSV Metrics Logger uses a source generator. You need to use the following NuGet packages:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<PackageReference Include="CSVMetricsLoggerGenerator" Version="1.0.0" />
|
<PackageReference Include="CSVMetricsLoggerGenerator" Version="1.1.0" />
|
||||||
<PackageReference Include="CSVMetricsLogger" Version="1.0.0" />
|
<PackageReference Include="CSVMetricsLogger" Version="1.1.0" />
|
||||||
```
|
```
|
||||||
|
|
||||||
Your data must be modeled as a structure; classes are not supported. It does not matter if you are using a (readonly) record struct or a regular struct. The only requirement is that the struct must be a partial struct. The source generator will generate the missing part of the struct for you. Each public property will be used as a column in the CSV file. The property type might be any type, as long as it supports the `ToString(CultureInfo)` method.
|
Your data must be modeled as a structure; classes are not supported. It does not matter if you are using a (readonly) record struct or a regular struct. The only requirement is that the struct must be a partial struct. The source generator will generate the missing part of the struct for you. Each public property will be used as a column in the CSV file. The property type can be any type, as long as it supports the ToString() method.
|
||||||
|
|
||||||
|
Additionally, you can use generic type parameters in your struct, as long as there is a suitable ToString() overload. Here is an example:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
using CSV_Metrics_Logger;
|
||||||
|
|
||||||
|
[CSVRecord]
|
||||||
|
public readonly partial record struct GenericTestData<TNum>(string Name, sbyte Age, TNum Measure) where TNum : IFloatingPointIeee754<TNum>;
|
||||||
|
|
||||||
|
List<TestData> testData =
|
||||||
|
[
|
||||||
|
new TestData<float>("Name 1", 14, 47.53f),
|
||||||
|
new TestData<float>("Name 2", 25, 19.84f),
|
||||||
|
new TestData<float>("Name 3", 36, 38.78f),
|
||||||
|
new TestData<float>("Name 4", 47, 17.25f),
|
||||||
|
new TestData<float>("Name 5", 58, 73.89f),
|
||||||
|
];
|
||||||
|
|
||||||
|
var filename = Path.GetTempFileName();
|
||||||
|
await using var storage = CSVStorage<TestData<float>>.Create(filename);
|
||||||
|
|
||||||
|
foreach (var data in testData)
|
||||||
|
storage.Write(data);
|
||||||
|
```
|
||||||
|
|
||||||
For each data structure, you create a CSVStorage instance. The CSVStorage instance is a disposable object. You must dispose of it when you are done with it. When the CSV file already exists, the CSVStorage object will append data to the existing file; the header will not be written again.
|
For each data structure, you create a CSVStorage instance. The CSVStorage instance is a disposable object. You must dispose of it when you are done with it. When the CSV file already exists, the CSVStorage object will append data to the existing file; the header will not be written again.
|
34
README.md
34
README.md
@ -18,7 +18,7 @@ List<TestData> testData =
|
|||||||
];
|
];
|
||||||
|
|
||||||
var filename = Path.GetTempFileName();
|
var filename = Path.GetTempFileName();
|
||||||
await using var storage = CSVStorage<TestData>.Create(fileName);
|
await using var storage = CSVStorage<TestData>.Create(filename);
|
||||||
|
|
||||||
foreach (var data in testData)
|
foreach (var data in testData)
|
||||||
storage.Write(data);
|
storage.Write(data);
|
||||||
@ -26,13 +26,37 @@ foreach (var data in testData)
|
|||||||
|
|
||||||
You might use `storage.Write` from multiple threads. The logger will handle the synchronization for you.
|
You might use `storage.Write` from multiple threads. The logger will handle the synchronization for you.
|
||||||
|
|
||||||
CSV Metrics Logger uses a source generator. You have to use the following NuGet packages:
|
CSV Metrics Logger uses a source generator. You need to use the following NuGet packages:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<PackageReference Include="CSVMetricsLoggerGenerator" Version="1.0.0" />
|
<PackageReference Include="CSVMetricsLoggerGenerator" Version="1.1.0" />
|
||||||
<PackageReference Include="CSVMetricsLogger" Version="1.0.0" />
|
<PackageReference Include="CSVMetricsLogger" Version="1.1.0" />
|
||||||
```
|
```
|
||||||
|
|
||||||
Your data must be modeled as a structure; classes are not supported. It does not matter if you are using a (readonly) record struct or a regular struct. The only requirement is that the struct must be a partial struct. The source generator will generate the missing part of the struct for you. Each public property will be used as a column in the CSV file. The property type might be any type, as long as it supports the `ToString(CultureInfo)` method.
|
Your data must be modeled as a structure; classes are not supported. It does not matter if you are using a (readonly) record struct or a regular struct. The only requirement is that the struct must be a partial struct. The source generator will generate the missing part of the struct for you. Each public property will be used as a column in the CSV file. The property type can be any type, as long as it supports the ToString() method.
|
||||||
|
|
||||||
|
Additionally, you can use generic type parameters in your struct, as long as there is a suitable ToString() overload. Here is an example:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
using CSV_Metrics_Logger;
|
||||||
|
|
||||||
|
[CSVRecord]
|
||||||
|
public readonly partial record struct GenericTestData<TNum>(string Name, sbyte Age, TNum Measure) where TNum : IFloatingPointIeee754<TNum>;
|
||||||
|
|
||||||
|
List<TestData> testData =
|
||||||
|
[
|
||||||
|
new TestData<float>("Name 1", 14, 47.53f),
|
||||||
|
new TestData<float>("Name 2", 25, 19.84f),
|
||||||
|
new TestData<float>("Name 3", 36, 38.78f),
|
||||||
|
new TestData<float>("Name 4", 47, 17.25f),
|
||||||
|
new TestData<float>("Name 5", 58, 73.89f),
|
||||||
|
];
|
||||||
|
|
||||||
|
var filename = Path.GetTempFileName();
|
||||||
|
await using var storage = CSVStorage<TestData<float>>.Create(filename);
|
||||||
|
|
||||||
|
foreach (var data in testData)
|
||||||
|
storage.Write(data);
|
||||||
|
```
|
||||||
|
|
||||||
For each data structure, you create a CSVStorage instance. The CSVStorage instance is a disposable object. You must dispose of it when you are done with it. When the CSV file already exists, the CSVStorage object will append data to the existing file; the header will not be written again.
|
For each data structure, you create a CSVStorage instance. The CSVStorage instance is a disposable object. You must dispose of it when you are done with it. When the CSV file already exists, the CSVStorage object will append data to the existing file; the header will not be written again.
|
Loading…
Reference in New Issue
Block a user