Skip to content

Merge v6 release branch into master #1536

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 106 commits into from
Apr 11, 2025
Merged

Merge v6 release branch into master #1536

merged 106 commits into from
Apr 11, 2025

Conversation

angularsen
Copy link
Owner

@angularsen angularsen commented Apr 11, 2025

Fixes #1533
Related #1200

Branched out master to maintenance/v5 and merging release/v6 into master.

From now on, v6 code base is the main branch although it is still in prerelease and still needs a bit more work before the first release.

angularsen and others added 30 commits July 16, 2023 18:20
Add possibility to have double.NaN, double.NegativeInifinity and
double.PositiveInifnity special values.

---------

Co-authored-by: Andreas Gullberg Larsen <[email protected]>
Co-authored-by: Étienne Fortin <[email protected]>
Came across this while working on #1329. I'm afraid it's an API-breaking
change, so maybe it should wait for v6?

Related:
#1200
Came across some more unit names that seem wrong. Breaking changes once
more.

Related #1200
# Conflicts:
#	UnitsNet.Tests/GeneratedCode/TestsBase/CoefficientOfThermalExpansionTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/DensityTestsBase.g.cs
Related #1200 

In the PR adding generic math (#1164) @AndreasLeeb states:
> Regarding the operators in the *.extra.cs files, that could be tackled
easily by describing the dependencies (operations) between different
quantities in the quantity JSON files, and then the operator overloads
and the generic math interfaces for the quantity structs could also be
automatically generated. But that's a topic for another time 😄

I decided to give this a shot.

`UnitRelations.json` contains relations extracted from the existing
*.extra.cs files. I decided on a new file because multiplication is
commutative and I didn't want to duplicate these in the individual
quantity JSON files, or risk missing one or the other, so it's best to
define them once in one place. The generator handles this by generating
two operators for a single multiplication relation.

The relations format uses the quantities method names. This is a bit
unfortunate, but it's the best I could come up with without making the
CodeGen project depend on UnitsNet, which would create a bit of a
chicken/egg problem. This is not unheard of (self-hosted compilers) but
I wanted to keep it simple for now.

The generated code enables the removal of 44 *.extra.cs files, and the
17 remaining contain much less code.

---------

Co-authored-by: Andreas Gullberg Larsen <[email protected]>
Related #1200 
Fixes #1356

Apparently, protobuf-net does not support 0-indexed order values.

### Changes
- Change `DataMember` explicit order from 0-indexed to 1-indexed

### Background
Some investigation indicates that the actual order value is not important, only the relative ordering: 
#1356 (comment)

- WCF should tolerate this, according to its docs. #1356 (comment)
- Binary formatters hopefully only care about relative ordering and thus still compatible?
	- Protobuf-net, it never worked and should be OK
	- [BinaryFormatter](https://learn.microsoft.com/en-us/dotnet/api/system.runtime.serialization.formatters.binary.binaryformatter?view=net-8.0) is obsolete and generally not recommended for years, so hopefully no users are affected
	- A bunch of others exist too, haven't looked into how they handle this
- XML/JSON serializers should tolerate any order, can't imagine it breaking these?
Fixes #1194

---------

Co-authored-by: Andreas Gullberg Larsen <[email protected]>
# Conflicts:
#	UnitsNet.Serialization.JsonNet.Tests/AbbreviatedUnitsConverterTests.cs
Fixup of commit 7d1df9e

Regenerate code to get more xmldoc fixes
In PR #1195 @angularsen asks @tmilnthorp:
> Question; what do you think of also changing Information/BitRate from
decimal to double?
> 
> On one hand, it is sort of weird to risk getting rounding errors like
8.00000001 bits. On the other hand, for all other units (kilobyte, etc)
that are probably way more used, floating point is perhaps the expected
value representation.
> 
> If we change all 3 quantities to double, we have the potential to
clean up a LOT of QuantityValue complexity.

How about we continue that discussion here? 😄 

This PR is pretty straightforward and mimics #1195, except that
`Information` is used as the typical decimal quantity in some tests.
Because there won't be any decimal quantities left if these PRs get
merged, I removed those tests in anticipation of completely removing all
decimal support.

---------

Co-authored-by: Andreas Gullberg Larsen <[email protected]>
### Changes
- Remove `QuantityValue`, replaced with `double`
- Remove `TValueType` from interfaces
	- Remove `IQuantity<TUnitType, out TValueType>`
	- Remove `IValueQuantity<out TValueType>`
- Change `IQuantity<TSelf, TUnitType, out TValueType>` to
`IQuantity<TSelf, TUnitType>`
- Change `IArithmeticQuantity<TSelf, TUnitType, TValueType>` to
`IArithmeticQuantity<TSelf, TUnitType>`

### Changes to UnitsNet.Serialiation.JsonNet
- Deserializing previously serialized JSON for decimal quantities
`Information`, `BitRate` and `Power` still work, but it now reads just
`double Value` property and ignores `string ValueString` and `string
ValueType` properties. This may lose precision compared to preserving
the full `decimal` value, but `decimal` is no longer supported in v6.


### Background
In #1195 @angularsen says:

> If we change all 3 quantities to double, we have the potential to
clean up a LOT of QuantityValue complexity.

This made me wonder how deep that complexity goes so I decided to
experiment, and this is the result.

I must say some of these changes make me a bit sad. A lot of work and
some very clever thinking went into supporting multiple numerical types,
and I want to acknowledge that. 🙇

Also, I took it as far as possible but that might not be the best
outcome, for example we might want to keep deserialization support. This
just demonstrates a possible direction we could go in.

---------

Co-authored-by: Andreas Gullberg Larsen <[email protected]>
This is safer, since no PR can modify the condition.
Instead the approvals whether to publish or not is controlled by envirnoment, configured in Azure DevOps.
I think this was forgotten in #1289, removes 3k+ lines of comments that
are not true anymore.

---------

Co-authored-by: Andreas Gullberg Larsen <[email protected]>
### Changes
- Change `Duration` from explicit to implicit cast to/from `TimeSpan`
- Remove operator overloads for `TimeSpan` now covered by implicit cast for all but left operands

### Background
See #1354 (comment)

One issue is that the operator overloads only work when `TimeSpan` is the right operand.

I changed the code generation to take this into account, but another option would be to make a breaking change where we just don't support `TimeSpan` as the left operand at all.

Then users would have to cast explicitly, or for multiplication just reverse the operands.

This would affect 13 operators:

```
TimeSpan * Acceleration
TimeSpan * ElectricCurrent
TimeSpan * ElectricCurrentGradient
TimeSpan * ForceChangeRate
TimeSpan * KinematicViscosity
TimeSpan * MassFlow
TimeSpan * MolarFlow
TimeSpan * Power
TimeSpan * PressureChangeRate
TimeSpan * RotationalSpeed
TimeSpan * Speed
TimeSpan * TemperatureChangeRate
TimeSpan * VolumeFlow
```

Of which only 6 are used in tests so I assume are supported in v5:
```
TimeSpan * KinematicViscosity
TimeSpan * MassFlow
TimeSpan * Power
TimeSpan * RotationalSpeed
TimeSpan * TemperatureChangeRate
TimeSpan * Speed
```

---------

Co-authored-by: Andreas Gullberg Larsen <[email protected]>
In
[#1329](#1329 (comment))
this proposal came up:

> Another idea: generate division operators based on multiplication.
Right now we define:
> ```
> ElectricPotential.Volt = ElectricCurrent.Ampere *
ElectricResistance.Ohm (and generate the reverse)
> ElectricCurrent.Ampere = ElectricPotential.Volt /
ElectricResistance.Ohm
> ElectricResistance.Ohm = ElectricPotential.Volt /
ElectricCurrent.Ampere
> ```
> But those last two could also be generated based on the first.

This PR is an experiment implementing this.

### Breaking changes:

- `TimeSpan = Volume / VolumeFlow` => `Duration = Volume / VolumeFlow`
Added unit relation to get TemperatureChangeRate from TemperatureDelta
divided by Duration.

---------

Co-authored-by: Andreas Gullberg Larsen <[email protected]>
Some of the extension methods in `UnitMath.cs` (e.g. Average) take an
`Enum unitType` argument.
The compiler should be able to detect when the units type doesn't match
the quantity type.

* This will break backwards compatibility, but only for:
  * People doing really weird things.
* People using the explicit generic type instead of inference (e.g.
`Average<Length>(LengthUnit.Inch)`), in which case they can fix the code
by changing it to e.g. `Average<Length, LengthUnit>(LengthUnit.Inch)`
* This change might be warranted in `UnitConverter.cs` as well, but
can't be implemented as a straight-forward refactor since it breaks
compatibility in generated code (e.g.
`unitConverter.SetConversionFunction<ElectricPotential>` in
`ElectricPotential` should be `SetConversionFunction<ElectricPotential,
ElectricPotentialUnit>`

In addition, had to remove a few unit tests that were asserting type
safety.
All tests that were removed:
* Were only testing that an incorrect behavior throws an exception
(`Assert.Throws`)
* Don't compile after the changes in `UnitMath.cs`
As we're doing breaking changes in v6, it might be worth upgrading to the current [Long Term Support](https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core) version of dotnet.

This enables us to use C# 12 features and remove a bunch of conditional compilation (net 5328 deletions)
Fixes #1379 

Change the license expression in the nugets to match the LICENSE file. 
Previously, nuget.org did not accept MIT-0 expression.
angularsen and others added 26 commits December 30, 2024 00:04
# Conflicts:
#	CodeGen/CodeGen.csproj
#	CodeGen/Generators/NanoFrameworkGen/NuspecGenerator.cs
#	CodeGen/Generators/UnitsNetGen/UnitTestBaseClassGenerator.cs
#	Common/UnitEnumValues.g.json
#	UnitsNet.Benchmark/UnitsNet.Benchmark.csproj
#	UnitsNet.NanoFramework/GeneratedCode/AbsorbedDoseOfIonizingRadiation/UnitsNet.NanoFramework.AbsorbedDoseOfIonizingRadiation.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Acceleration/UnitsNet.NanoFramework.Acceleration.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/AmountOfSubstance/UnitsNet.NanoFramework.AmountOfSubstance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/AmplitudeRatio/UnitsNet.NanoFramework.AmplitudeRatio.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Angle/UnitsNet.NanoFramework.Angle.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ApparentEnergy/UnitsNet.NanoFramework.ApparentEnergy.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ApparentPower/UnitsNet.NanoFramework.ApparentPower.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Area/UnitsNet.NanoFramework.Area.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/AreaDensity/UnitsNet.NanoFramework.AreaDensity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/AreaMomentOfInertia/UnitsNet.NanoFramework.AreaMomentOfInertia.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/BitRate/UnitsNet.NanoFramework.BitRate.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/BrakeSpecificFuelConsumption/UnitsNet.NanoFramework.BrakeSpecificFuelConsumption.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Capacitance/UnitsNet.NanoFramework.Capacitance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/CoefficientOfThermalExpansion/UnitsNet.NanoFramework.CoefficientOfThermalExpansion.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Compressibility/UnitsNet.NanoFramework.Compressibility.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Density/UnitsNet.NanoFramework.Density.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Duration/UnitsNet.NanoFramework.Duration.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/DynamicViscosity/UnitsNet.NanoFramework.DynamicViscosity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricAdmittance/UnitsNet.NanoFramework.ElectricAdmittance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricCharge/UnitsNet.NanoFramework.ElectricCharge.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricChargeDensity/UnitsNet.NanoFramework.ElectricChargeDensity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricConductance/UnitsNet.NanoFramework.ElectricConductance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricConductivity/UnitsNet.NanoFramework.ElectricConductivity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricCurrent/UnitsNet.NanoFramework.ElectricCurrent.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricCurrentDensity/UnitsNet.NanoFramework.ElectricCurrentDensity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricCurrentGradient/UnitsNet.NanoFramework.ElectricCurrentGradient.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricField/UnitsNet.NanoFramework.ElectricField.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricInductance/UnitsNet.NanoFramework.ElectricInductance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricPotential/UnitsNet.NanoFramework.ElectricPotential.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricPotentialAc/UnitsNet.NanoFramework.ElectricPotentialAc.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricPotentialChangeRate/UnitsNet.NanoFramework.ElectricPotentialChangeRate.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricPotentialDc/UnitsNet.NanoFramework.ElectricPotentialDc.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricResistance/UnitsNet.NanoFramework.ElectricResistance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricResistivity/UnitsNet.NanoFramework.ElectricResistivity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricSurfaceChargeDensity/UnitsNet.NanoFramework.ElectricSurfaceChargeDensity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Energy/UnitsNet.NanoFramework.Energy.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/EnergyDensity/UnitsNet.NanoFramework.EnergyDensity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Entropy/UnitsNet.NanoFramework.Entropy.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Force/UnitsNet.NanoFramework.Force.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ForceChangeRate/UnitsNet.NanoFramework.ForceChangeRate.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ForcePerLength/UnitsNet.NanoFramework.ForcePerLength.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Frequency/UnitsNet.NanoFramework.Frequency.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/FuelEfficiency/UnitsNet.NanoFramework.FuelEfficiency.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/HeatFlux/UnitsNet.NanoFramework.HeatFlux.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/HeatTransferCoefficient/UnitsNet.NanoFramework.HeatTransferCoefficient.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Illuminance/UnitsNet.NanoFramework.Illuminance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Impulse/UnitsNet.NanoFramework.Impulse.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Information/UnitsNet.NanoFramework.Information.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Irradiance/UnitsNet.NanoFramework.Irradiance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Irradiation/UnitsNet.NanoFramework.Irradiation.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Jerk/UnitsNet.NanoFramework.Jerk.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/KinematicViscosity/UnitsNet.NanoFramework.KinematicViscosity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/LapseRate/UnitsNet.NanoFramework.LapseRate.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/LeakRate/UnitsNet.NanoFramework.LeakRate.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Length/UnitsNet.NanoFramework.Length.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Level/UnitsNet.NanoFramework.Level.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/LinearDensity/UnitsNet.NanoFramework.LinearDensity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/LinearPowerDensity/UnitsNet.NanoFramework.LinearPowerDensity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Luminance/UnitsNet.NanoFramework.Luminance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Luminosity/UnitsNet.NanoFramework.Luminosity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/LuminousFlux/UnitsNet.NanoFramework.LuminousFlux.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/LuminousIntensity/UnitsNet.NanoFramework.LuminousIntensity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/MagneticField/UnitsNet.NanoFramework.MagneticField.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/MagneticFlux/UnitsNet.NanoFramework.MagneticFlux.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Magnetization/UnitsNet.NanoFramework.Magnetization.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Mass/UnitsNet.NanoFramework.Mass.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/MassConcentration/UnitsNet.NanoFramework.MassConcentration.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/MassFlow/UnitsNet.NanoFramework.MassFlow.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/MassFlux/UnitsNet.NanoFramework.MassFlux.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/MassFraction/UnitsNet.NanoFramework.MassFraction.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/MassMomentOfInertia/UnitsNet.NanoFramework.MassMomentOfInertia.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Molality/UnitsNet.NanoFramework.Molality.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/MolarEnergy/UnitsNet.NanoFramework.MolarEnergy.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/MolarEntropy/UnitsNet.NanoFramework.MolarEntropy.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/MolarFlow/UnitsNet.NanoFramework.MolarFlow.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/MolarMass/UnitsNet.NanoFramework.MolarMass.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Molarity/UnitsNet.NanoFramework.Molarity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Permeability/UnitsNet.NanoFramework.Permeability.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Permittivity/UnitsNet.NanoFramework.Permittivity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/PorousMediumPermeability/UnitsNet.NanoFramework.PorousMediumPermeability.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Power/UnitsNet.NanoFramework.Power.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/PowerDensity/UnitsNet.NanoFramework.PowerDensity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/PowerRatio/UnitsNet.NanoFramework.PowerRatio.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Pressure/UnitsNet.NanoFramework.Pressure.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/PressureChangeRate/UnitsNet.NanoFramework.PressureChangeRate.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Properties/AssemblyInfo.cs
#	UnitsNet.NanoFramework/GeneratedCode/Quantities/RadiationEquivalentDoseRate.g.cs
#	UnitsNet.NanoFramework/GeneratedCode/RadiationEquivalentDose/UnitsNet.NanoFramework.RadiationEquivalentDose.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/RadiationEquivalentDoseRate/UnitsNet.NanoFramework.RadiationEquivalentDoseRate.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/RadiationExposure/UnitsNet.NanoFramework.RadiationExposure.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Radioactivity/UnitsNet.NanoFramework.Radioactivity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Ratio/UnitsNet.NanoFramework.Ratio.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/RatioChangeRate/UnitsNet.NanoFramework.RatioChangeRate.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ReactiveEnergy/UnitsNet.NanoFramework.ReactiveEnergy.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ReactivePower/UnitsNet.NanoFramework.ReactivePower.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ReciprocalArea/UnitsNet.NanoFramework.ReciprocalArea.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ReciprocalLength/UnitsNet.NanoFramework.ReciprocalLength.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/RelativeHumidity/UnitsNet.NanoFramework.RelativeHumidity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/RotationalAcceleration/UnitsNet.NanoFramework.RotationalAcceleration.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/RotationalSpeed/UnitsNet.NanoFramework.RotationalSpeed.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/RotationalStiffness/UnitsNet.NanoFramework.RotationalStiffness.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/RotationalStiffnessPerLength/UnitsNet.NanoFramework.RotationalStiffnessPerLength.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Scalar/UnitsNet.NanoFramework.Scalar.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/SolidAngle/UnitsNet.NanoFramework.SolidAngle.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/SpecificEnergy/UnitsNet.NanoFramework.SpecificEnergy.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/SpecificEntropy/UnitsNet.NanoFramework.SpecificEntropy.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/SpecificFuelConsumption/UnitsNet.NanoFramework.SpecificFuelConsumption.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/SpecificVolume/UnitsNet.NanoFramework.SpecificVolume.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/SpecificWeight/UnitsNet.NanoFramework.SpecificWeight.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Speed/UnitsNet.NanoFramework.Speed.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/StandardVolumeFlow/UnitsNet.NanoFramework.StandardVolumeFlow.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Temperature/UnitsNet.NanoFramework.Temperature.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/TemperatureChangeRate/UnitsNet.NanoFramework.TemperatureChangeRate.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/TemperatureDelta/UnitsNet.NanoFramework.TemperatureDelta.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/TemperatureGradient/UnitsNet.NanoFramework.TemperatureGradient.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ThermalConductivity/UnitsNet.NanoFramework.ThermalConductivity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ThermalInsulance/UnitsNet.NanoFramework.ThermalInsulance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Torque/UnitsNet.NanoFramework.Torque.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Turbidity/UnitsNet.NanoFramework.Turbidity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/VitaminA/UnitsNet.NanoFramework.VitaminA.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Volume/UnitsNet.NanoFramework.Volume.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/VolumeConcentration/UnitsNet.NanoFramework.VolumeConcentration.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/VolumeFlow/UnitsNet.NanoFramework.VolumeFlow.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/VolumeFlowPerArea/UnitsNet.NanoFramework.VolumeFlowPerArea.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/VolumePerLength/UnitsNet.NanoFramework.VolumePerLength.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/VolumetricHeatCapacity/UnitsNet.NanoFramework.VolumetricHeatCapacity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/WarpingMomentOfInertia/UnitsNet.NanoFramework.WarpingMomentOfInertia.nuspec
#	UnitsNet.NumberExtensions.Tests/UnitsNet.NumberExtensions.Tests.csproj
#	UnitsNet.NumberExtensions/GeneratedCode/NumberToApparentEnergyExtensions.g.cs
#	UnitsNet.NumberExtensions/GeneratedCode/NumberToApparentPowerExtensions.g.cs
#	UnitsNet.NumberExtensions/GeneratedCode/NumberToCapacitanceExtensions.g.cs
#	UnitsNet.NumberExtensions/GeneratedCode/NumberToElectricAdmittanceExtensions.g.cs
#	UnitsNet.NumberExtensions/GeneratedCode/NumberToElectricConductanceExtensions.g.cs
#	UnitsNet.NumberExtensions/GeneratedCode/NumberToElectricPotentialAcExtensions.g.cs
#	UnitsNet.NumberExtensions/GeneratedCode/NumberToElectricPotentialDcExtensions.g.cs
#	UnitsNet.NumberExtensions/GeneratedCode/NumberToElectricResistanceExtensions.g.cs
#	UnitsNet.NumberExtensions/GeneratedCode/NumberToRadiationEquivalentDoseRateExtensions.g.cs
#	UnitsNet.NumberExtensions/GeneratedCode/NumberToReactiveEnergyExtensions.g.cs
#	UnitsNet.NumberExtensions/GeneratedCode/NumberToReactivePowerExtensions.g.cs
#	UnitsNet.NumberExtensions/GeneratedCode/NumberToTemperatureChangeRateExtensions.g.cs
#	UnitsNet.NumberExtensions/UnitsNet.NumberExtensions.csproj
#	UnitsNet.Serialization.JsonNet.Tests/UnitsNet.Serialization.JsonNet.Tests.csproj
#	UnitsNet.Serialization.JsonNet/UnitsNet.Serialization.JsonNet.csproj
#	UnitsNet.Tests/CustomCode/RadiationEquivalentDoseRateTests.cs
#	UnitsNet.Tests/CustomCode/RadiationEquivalentDoseTests.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/AngleTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/BitRateTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/CoefficientOfThermalExpansionTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/DensityTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/DynamicViscosityTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/ElectricAdmittanceTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/ElectricConductanceTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/ElectricResistanceTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/FuelEfficiencyTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/HeatFluxTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/HeatTransferCoefficientTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/InformationTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/MassConcentrationTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/MolarityTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/PowerTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/RadiationEquivalentDoseRateTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/SpecificEntropyTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/TemperatureChangeRateTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/ThermalConductivityTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/ThermalResistanceTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/TorquePerLengthTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/VolumeConcentrationTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/VolumeFlowTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/VolumetricHeatCapacityTestsBase.g.cs
#	UnitsNet.Tests/UnitAbbreviationsCacheTests.cs
#	UnitsNet.Tests/UnitsNet.Tests.csproj
#	UnitsNet/CustomCode/Quantities/Power.extra.cs
#	UnitsNet/CustomCode/UnitParser.cs
#	UnitsNet/GeneratedCode/Quantities/RadiationEquivalentDoseRate.g.cs
#	UnitsNet/GeneratedCode/Quantities/ThermalInsulance.g.cs
#	UnitsNet/GeneratedCode/Quantities/TorquePerLength.g.cs
#	UnitsNet/QuantityFormatter.cs
#	UnitsNet/UnitsNet.csproj
Made obsolete by #1467, #1444

Now removed in v6:
- ApparentEnergy
- ApparentPower
- Capacitance
- ElectricPotentialAc
- ElectricPotentialDc
- ReactiveEnergy
- ReactivePower
Fixes #1463 
Fixes #1043

- removed the `UnitSystem` constructor from the Dimensionless quantities
(which was previously throwing)
- `As`/`ToUnit(UnitSystem)` for all dimensionless quantities now convert
to their `BaseUnit` (i.e. the "DecimalFraction") *
- `As/ToUnit(UnitSystem)` for all other quantities refactored using the
QuantityInfoExtensions
- added tests for the `UnitSystem` methods, skipping the tests for all
quantities that fail with `UnitSystem.SI` (with a reason)

There are only two dimensionless quantities (IMO) that don't fit the
definition:
- `RelativeHumidity`: currently has only the `Percent` unit, I think we
should add the `DecimalFraction`, setting it to be the `BaseUnit`
- `FuelEfficiency`: I think this could be defined as `"L": -2` with the
addition of the `MeterPerCubicMeter` unit (possibly setting it as its
`BaseUnit`, if we want to satisfy the `BaseUnit_HasSIBase` test)

You can look for `As_UnitSystem_ReturnsValueInDimensionlessUnit` if you
want to check the rest of the dimensionless quantities.

Regarding the removed `BaseUnits` (see `Force.json` or `Pressure.json`),
those were detected by some earlier tests I had in place, regarding the
multiplication/division operators where I used the following definition:
- A given operation between two quantities (either multiplication or
division) such as `A / B = C` is only defined if `A.Dimensions /
B.Dimensions = C.Dimensions`
- When the intersection between `A.Dimensions` and `B.Dimensions` is the
empty set, for every unit of `A` and `B` for which the `BaseUnits` is
not `Unidefined`, and every unit of `C`, having `BaseUnits` =
`A.BaseUnits union B.BaseUnits`, it must be true that `C.Value = A.Value
/ B.Value`.
- When the intersection between `A.Dimensions` and `B.Dimensions` is not
empty, and the intersecting `BaseUnits` of `A` , `B` and `C` are all the
same, then again we have the same condition, which I generally refer to
as "the conversion coefficient is 1"
- The same logic can be used to infer the unit-conversion coefficient
based off the `Dimensions` and a pair of `BaseUnits`, but special
attention needs to be taken w.r.t. the exponents (e.g. `Area` is `L2` so
the unit-conversion coefficients are squares of the ones from `Length`)
- If we want to extend this definition in the future, we should consider
introducing a way to override the "default conversion coefficient"
(`1`)..

Here are some links:
https://en.wikipedia.org/wiki/Dimensional_analysis
https://en.wikipedia.org/wiki/International_System_of_Units#Definition
https://en.wikipedia.org/wiki/Coherence_(units_of_measurement)
- added a new `UnitPrefixBuilder` (called from the
`QuantityJonsFilesParser`)
- removed the skipped tests (with the "The BaseUnits are not yet
supported by the prefix-generator" reason)
- added a `DebugDisplay` for the `Quantity` and the `Unit` (JsonTypes)
and
- added a `ToString` implementation to the `BaseDimensions` (JsonTypes)

https://en.wikipedia.org/wiki/Metric_prefix

---------

Co-authored-by: Andreas Gullberg Larsen <[email protected]>
- `BaseUnits`: no longer using the `AbbeviationsCache`, the new format
is `L=Meter, M=Kilogram, T=Second`
- `BaseDimensions`: the exponent moved inside the dimension-brackets:
`[Length][Time^-1]`
- `BaseDimensions`: minor performance improvements

As mentioned in #1452, the main motivation here is the removal of the
potential side effects of accessing/loading the unit abbreviations (e.g.
during the `QuantityInfo` construction)
Renaming `MassMomentOfInertia.TonneSquareMilimeter` to
`MassMomentOfInertia.TonneSquareMillimeter` (as part of #1200 )
… UnitNotFoundException (#1484) (#1494)

Fixes #1423 for `release-v6`
Carry over from #1484

`UnitParser.Parse<LengthUnit>("MM")` fails due to matching both
`Megameter` and `Millimeter` in case-insensitive matching, but matches
neither of them in the case-sensitive fallback. It was confusing to get
`UnitsNotFoundException` in this case, since case-insensitive usually
works for most units.

### Changes
- Handle this case and throw `AmbiguousUnitParseException` instead of
`UnitNotFoundException`
- Describe the case-insensitive units that matched
- Fix existing test
`Parse_WithMultipleCaseInsensitiveMatchesButNoExactMatches_ThrowsUnitNotFoundException`
- Skip retrying with fallback culture if no specific `formatProvider`
was given
- Avoid some of the unnecessary array allocations

Co-authored-by: Andreas Gullberg Larsen <[email protected]>
Improving the `ToUnit` test coverage:
- `ToUnit_FromNonBaseUnit_ReturnsQuantityWithGivenUnit` now also tests
the non-base to non-base conversions
- `ToUnit_FromNonBaseUnit_ReturnsQuantityWithGivenUnit` is no longer
skipped for quantities with a single unit (the test is still generated)
- added the `ToUnit_FromIQuantity_ReturnsTheExpectedIQuantity` test:
covering the `IQuantity` interfaces
- added the `Convert_GetTypeCode_Returns_Object` test (completing the
`IConvertible` interface coverage)
- `IQuantityTests`: removed the redundant `UnitSystem` tests and updated
"wrong unit type" tests, using all quantities
…newtonSecond (#1491)

Rename `SpecificFuelConsumption.GramPerKiloNewtonSecond` to
`GramPerKilonewtonSecond` (part of #1200)
Ensure that all base quantity units are `BaseUnits`:
- introduced a test for each of the base quantities (`Length`, `Mass`
etc.) that ensures that all of their units have valid `BaseUnits`
definition
- fixed some incorrect `BaseUnits` definitions:
`Acceleration.StandardGravity` and `Temperature.MillidegreeCelsius`
- added missing `BaseUnits` definitions: `Length`, `Temperature` and
`TemperatureChangeRate` (removing 3 out of its 4 `[Skip]`-ed tests)
Include the non-prefixed `BaseUnits` in the `BaseUnitPrefixes`:
- the `BaseUnitPrefixes` now also handles the case where prefixing an
already prefixed base unit results in a non-prefixed base unit
- regenerating the quantities resulted in a number of new `BaseUnits` to
become available (as well as some which got their scales reduced)
In order to better compare the performance between the existing v6 and
the one with the [Fractions](https://github.com/danm-de/Fractions) I've
been using these benchmarks. They are not _very polished_ (and I haven't
had the time for the string-related stuff) but they do the trick.

You don't have to merge them if you don't want to, but at least they are
here (so I can reference the code).

I'll probably add the results from my local runs in a comment (or more
like a bunch of comments) later on (my previous results got wiped by the
build script 😆) - but I was hoping that we could update the packages and
add net9.0 to the list of targets first (there are [lots of a cool
stuff](Fractions-DotNet/Fractions#90) in net9).

PS I'm not sure if that old `gh-action` would still work or not, but
even adding the results by hand
([here?](https://github.com/angularsen/UnitsNet/tree/gh-pages/benchmarks/))
is an option.

Here's what I did for the
[Fractions](https://github.com/danm-de/Fractions/blob/master/benchmarks/Readme.md)
(the `Readme.md` was 90% AI generated).
Changing the `Dimensions` and `BaseUnit` for the `FuelEfficiency`:
- `BaseUnit` changed from `LiterPer100Kilometers` (defaults to
`+Infinity`) to `KilometersPerLiter` (defaults to `0`)
- added `Dimensions` of `"L": -2` (was previously treated as a
dimensionless quantity)
- updated the relevant tests
- skipped all SI-related tests
)

- `VolumeConcentration`: `LitersPerMililiter` renamed to
`LitersPerMilliliter`
- `UnitEnumValues`- renamed the units by hand (preserving the old int
value)
…PerMilliliter (#1504)

fixes the `VolumeConcentration` units `LitersPerLiter` and
`LitersPerMilliliter` (using the _PluralName_ for the `SingularName`
property)
…ng) (#1498)

This is a port of #1393, targeting the `release-v6` consisting of the
changes that didn't require any modifications to the tests.

I'll create another PR with the rest of the (breaking) changes in a bit.
Aiming to complete #1451 (the PR #1502 added .NET 9 for `master` but not
`release/v6`. I touched a few more projects and handled
`Activator.CreateInstance` differently - happy to simply copy #1502
exactly if you prefer.
Removing the `FrequencyUnit.BUnit`.

As discussed in
#1393 (comment)
…1499)

This is a port of #1393,
targeting the release-v6 consisting of the changes that broke one test
or another.

Most of these are related to conversions involving the US/British units
but there is also some confusion regarding the
[Calorie](https://en.wikipedia.org/wiki/Calorie) - the value of `4.1868`
was used (instead of `4.184`) in a few places, which is a note-worthy
difference.

Here are all the tests that broke:
- `HeatFlux` : due to the change in `Calorie`
- `HeatTransferCoefficient` : due to the change in `Calorie`
- `Impulse` : `PoundFootPerSecond`, `SlugFootPerSecond` were represented
by a single coefficient that is significantly different from what got:
see
#1393 (comment)
- `Luminosity` : see
#1393 (comment).
- `Power`: MechanicalHorsepower changed from `{x} * 745.69` to `{x} *
76.0402249 * 9.80665` as given by [this
article](https://en.wikipedia.org/wiki/Horsepower#Imperial_horsepower)
- `Pressure` the
[TechnicalAtmosphere](https://en.wikipedia.org/wiki/Kilogram-force_per_square_centimetre)
coefficient (no idea where the old one was taken from), see also
#1393 (comment)
- `SpecificFuelConsumption` : I'm not a domain expert, but `{x} * 28.33`
doesn't look right for `PoundMassPerPoundForceHour` (lb/(lbf·h))- here's
what I got: `{x} * 453.59237 / (0.0044482216152605 * 3600)`
- `ThermalResistance`: using different conversion coefficients for `BTU`
and `Calorie` from the one defined in `Energy` (note: I wasn't able to
confirm the "correct" conversion coefficient for BTU).
- `VolumetricHeatCapacity`: using different conversion coefficient for
`Calorie`
- `PressureUnit`: remove the `MeterOfElevation` and `FootOfElevation`
- `Pressure`: added `FromElevation` and `ToElevation` methods (using
`Length`)
`Enum` boxing optimizations:
- introduce the `UnitKey` struct as a replacement for the conversions
from `TUnit` to `Enum`
- re-mapped the `UnitAbbreviationCache` using the `UnitKey` for the
concurrent dictionary
- removed all `Convert.ToInt32(..)` calls
- optimized the `QuantityInfoLookup` collections
- refactored some of the `Quantity`/`UnitConverter` code (using the
`UnitParser`/`QuantityInfoLookup`)
- added some tests and benchmarks covering the new modifications

Breaking changes:
- changing the `Quantity.Names` from `string[]` to
`IReadOnlyCollection<string>`
- changing the `Quantity.Infos` from `QuantityInfo[]` to
`IReadOnlyList<QuantityInfo>`
- marking the `UnitConverter.ConvertByAbbreviation` method that takes a
`string?` for the `IFormatProvider?` as `[Obsolete]` (created an
overload)
- `UnitsNetSetup`: replaced the `ICollection<QuantityInfo>` constructor
parameter with `IEnumerable<QuantityInfo>`
- renamed the `QuantityInfo.ValueType` to `QuantityInfo.QuantityType`
(making the old property `[Obsolete]`)
- renamed two of the parameters of `UnitConverter.ConvertByName`
# Conflicts:
#	CodeGen/Generators/NanoFrameworkGen/NuspecGenerator.cs
#	PerfTests/PerfTest_Startup/PerfTest_Startup.csproj
#	PerfTests/PerfTest_Startup_v4_144_0/PerfTest_Startup_v4_144_0.csproj
#	PerfTests/PerfTest_Startup_v4_72_0/PerfTest_Startup_v4_72_0.csproj
#	UnitsNet.Benchmark/UnitsNet.Benchmark.csproj
#	UnitsNet.NanoFramework/GeneratedCode/AbsorbedDoseOfIonizingRadiation/UnitsNet.NanoFramework.AbsorbedDoseOfIonizingRadiation.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Acceleration/UnitsNet.NanoFramework.Acceleration.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/AmountOfSubstance/UnitsNet.NanoFramework.AmountOfSubstance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/AmplitudeRatio/UnitsNet.NanoFramework.AmplitudeRatio.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Angle/UnitsNet.NanoFramework.Angle.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ApparentEnergy/UnitsNet.NanoFramework.ApparentEnergy.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ApparentPower/ApparentPower.nfproj
#	UnitsNet.NanoFramework/GeneratedCode/ApparentPower/UnitsNet.NanoFramework.ApparentPower.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ApparentPower/packages.config
#	UnitsNet.NanoFramework/GeneratedCode/Area/UnitsNet.NanoFramework.Area.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/AreaDensity/UnitsNet.NanoFramework.AreaDensity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/AreaMomentOfInertia/UnitsNet.NanoFramework.AreaMomentOfInertia.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/BitRate/UnitsNet.NanoFramework.BitRate.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/BrakeSpecificFuelConsumption/UnitsNet.NanoFramework.BrakeSpecificFuelConsumption.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Capacitance/Capacitance.nfproj
#	UnitsNet.NanoFramework/GeneratedCode/Capacitance/UnitsNet.NanoFramework.Capacitance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Capacitance/packages.config
#	UnitsNet.NanoFramework/GeneratedCode/CoefficientOfThermalExpansion/UnitsNet.NanoFramework.CoefficientOfThermalExpansion.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Compressibility/UnitsNet.NanoFramework.Compressibility.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Density/UnitsNet.NanoFramework.Density.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/DoseAreaProduct/UnitsNet.NanoFramework.DoseAreaProduct.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Duration/UnitsNet.NanoFramework.Duration.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/DynamicViscosity/UnitsNet.NanoFramework.DynamicViscosity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricAdmittance/UnitsNet.NanoFramework.ElectricAdmittance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricApparentEnergy/UnitsNet.NanoFramework.ElectricApparentEnergy.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricApparentPower/UnitsNet.NanoFramework.ElectricApparentPower.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricCapacitance/UnitsNet.NanoFramework.ElectricCapacitance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricCharge/UnitsNet.NanoFramework.ElectricCharge.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricChargeDensity/UnitsNet.NanoFramework.ElectricChargeDensity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricConductance/UnitsNet.NanoFramework.ElectricConductance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricConductivity/UnitsNet.NanoFramework.ElectricConductivity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricCurrent/UnitsNet.NanoFramework.ElectricCurrent.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricCurrentDensity/UnitsNet.NanoFramework.ElectricCurrentDensity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricCurrentGradient/UnitsNet.NanoFramework.ElectricCurrentGradient.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricField/UnitsNet.NanoFramework.ElectricField.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricImpedance/UnitsNet.NanoFramework.ElectricImpedance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricInductance/UnitsNet.NanoFramework.ElectricInductance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricPotential/UnitsNet.NanoFramework.ElectricPotential.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricPotentialAc/ElectricPotentialAc.nfproj
#	UnitsNet.NanoFramework/GeneratedCode/ElectricPotentialAc/UnitsNet.NanoFramework.ElectricPotentialAc.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricPotentialAc/packages.config
#	UnitsNet.NanoFramework/GeneratedCode/ElectricPotentialChangeRate/UnitsNet.NanoFramework.ElectricPotentialChangeRate.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricPotentialDc/ElectricPotentialDc.nfproj
#	UnitsNet.NanoFramework/GeneratedCode/ElectricPotentialDc/UnitsNet.NanoFramework.ElectricPotentialDc.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricPotentialDc/packages.config
#	UnitsNet.NanoFramework/GeneratedCode/ElectricReactance/UnitsNet.NanoFramework.ElectricReactance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricReactiveEnergy/UnitsNet.NanoFramework.ElectricReactiveEnergy.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricReactivePower/UnitsNet.NanoFramework.ElectricReactivePower.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricResistance/UnitsNet.NanoFramework.ElectricResistance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricResistivity/UnitsNet.NanoFramework.ElectricResistivity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricSurfaceChargeDensity/UnitsNet.NanoFramework.ElectricSurfaceChargeDensity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ElectricSusceptance/UnitsNet.NanoFramework.ElectricSusceptance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Energy/UnitsNet.NanoFramework.Energy.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/EnergyDensity/UnitsNet.NanoFramework.EnergyDensity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Entropy/UnitsNet.NanoFramework.Entropy.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Force/UnitsNet.NanoFramework.Force.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ForceChangeRate/UnitsNet.NanoFramework.ForceChangeRate.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ForcePerLength/UnitsNet.NanoFramework.ForcePerLength.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Frequency/UnitsNet.NanoFramework.Frequency.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/FuelEfficiency/UnitsNet.NanoFramework.FuelEfficiency.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/HeatFlux/UnitsNet.NanoFramework.HeatFlux.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/HeatTransferCoefficient/UnitsNet.NanoFramework.HeatTransferCoefficient.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Illuminance/UnitsNet.NanoFramework.Illuminance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Impulse/UnitsNet.NanoFramework.Impulse.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Information/UnitsNet.NanoFramework.Information.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Irradiance/UnitsNet.NanoFramework.Irradiance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Irradiation/UnitsNet.NanoFramework.Irradiation.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Jerk/UnitsNet.NanoFramework.Jerk.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/KinematicViscosity/UnitsNet.NanoFramework.KinematicViscosity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/LapseRate/UnitsNet.NanoFramework.LapseRate.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/LeakRate/UnitsNet.NanoFramework.LeakRate.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Length/UnitsNet.NanoFramework.Length.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Level/UnitsNet.NanoFramework.Level.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/LinearDensity/UnitsNet.NanoFramework.LinearDensity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/LinearPowerDensity/UnitsNet.NanoFramework.LinearPowerDensity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Luminance/UnitsNet.NanoFramework.Luminance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Luminosity/UnitsNet.NanoFramework.Luminosity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/LuminousFlux/UnitsNet.NanoFramework.LuminousFlux.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/LuminousIntensity/UnitsNet.NanoFramework.LuminousIntensity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/MagneticField/UnitsNet.NanoFramework.MagneticField.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/MagneticFlux/UnitsNet.NanoFramework.MagneticFlux.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Magnetization/UnitsNet.NanoFramework.Magnetization.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Mass/UnitsNet.NanoFramework.Mass.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/MassConcentration/UnitsNet.NanoFramework.MassConcentration.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/MassFlow/UnitsNet.NanoFramework.MassFlow.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/MassFlux/UnitsNet.NanoFramework.MassFlux.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/MassFraction/UnitsNet.NanoFramework.MassFraction.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/MassMomentOfInertia/UnitsNet.NanoFramework.MassMomentOfInertia.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Molality/UnitsNet.NanoFramework.Molality.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/MolarEnergy/UnitsNet.NanoFramework.MolarEnergy.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/MolarEntropy/UnitsNet.NanoFramework.MolarEntropy.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/MolarFlow/UnitsNet.NanoFramework.MolarFlow.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/MolarMass/UnitsNet.NanoFramework.MolarMass.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Molarity/UnitsNet.NanoFramework.Molarity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Permeability/UnitsNet.NanoFramework.Permeability.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Permittivity/UnitsNet.NanoFramework.Permittivity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/PorousMediumPermeability/UnitsNet.NanoFramework.PorousMediumPermeability.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Power/UnitsNet.NanoFramework.Power.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/PowerDensity/UnitsNet.NanoFramework.PowerDensity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/PowerRatio/UnitsNet.NanoFramework.PowerRatio.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Pressure/UnitsNet.NanoFramework.Pressure.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/PressureChangeRate/UnitsNet.NanoFramework.PressureChangeRate.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Properties/AssemblyInfo.cs
#	UnitsNet.NanoFramework/GeneratedCode/RadiationEquivalentDose/UnitsNet.NanoFramework.RadiationEquivalentDose.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/RadiationEquivalentDoseRate/UnitsNet.NanoFramework.RadiationEquivalentDoseRate.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/RadiationExposure/UnitsNet.NanoFramework.RadiationExposure.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Radioactivity/UnitsNet.NanoFramework.Radioactivity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Ratio/UnitsNet.NanoFramework.Ratio.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/RatioChangeRate/UnitsNet.NanoFramework.RatioChangeRate.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ReactiveEnergy/ReactiveEnergy.nfproj
#	UnitsNet.NanoFramework/GeneratedCode/ReactiveEnergy/UnitsNet.NanoFramework.ReactiveEnergy.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ReactiveEnergy/packages.config
#	UnitsNet.NanoFramework/GeneratedCode/ReactivePower/ReactivePower.nfproj
#	UnitsNet.NanoFramework/GeneratedCode/ReactivePower/UnitsNet.NanoFramework.ReactivePower.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ReactivePower/packages.config
#	UnitsNet.NanoFramework/GeneratedCode/ReciprocalArea/UnitsNet.NanoFramework.ReciprocalArea.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ReciprocalLength/UnitsNet.NanoFramework.ReciprocalLength.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/RelativeHumidity/UnitsNet.NanoFramework.RelativeHumidity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/RotationalAcceleration/UnitsNet.NanoFramework.RotationalAcceleration.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/RotationalSpeed/UnitsNet.NanoFramework.RotationalSpeed.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/RotationalStiffness/UnitsNet.NanoFramework.RotationalStiffness.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/RotationalStiffnessPerLength/UnitsNet.NanoFramework.RotationalStiffnessPerLength.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Scalar/UnitsNet.NanoFramework.Scalar.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/SolidAngle/UnitsNet.NanoFramework.SolidAngle.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/SpecificEnergy/UnitsNet.NanoFramework.SpecificEnergy.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/SpecificEntropy/UnitsNet.NanoFramework.SpecificEntropy.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/SpecificFuelConsumption/UnitsNet.NanoFramework.SpecificFuelConsumption.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/SpecificVolume/UnitsNet.NanoFramework.SpecificVolume.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/SpecificWeight/UnitsNet.NanoFramework.SpecificWeight.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Speed/UnitsNet.NanoFramework.Speed.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/StandardVolumeFlow/UnitsNet.NanoFramework.StandardVolumeFlow.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Temperature/UnitsNet.NanoFramework.Temperature.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/TemperatureChangeRate/UnitsNet.NanoFramework.TemperatureChangeRate.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/TemperatureDelta/UnitsNet.NanoFramework.TemperatureDelta.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/TemperatureGradient/UnitsNet.NanoFramework.TemperatureGradient.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ThermalConductivity/UnitsNet.NanoFramework.ThermalConductivity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ThermalInsulance/UnitsNet.NanoFramework.ThermalInsulance.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/ThermalResistance/ThermalResistance.nfproj
#	UnitsNet.NanoFramework/GeneratedCode/ThermalResistance/packages.config
#	UnitsNet.NanoFramework/GeneratedCode/Torque/UnitsNet.NanoFramework.Torque.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/TorquePerLength/TorquePerLength.nfproj
#	UnitsNet.NanoFramework/GeneratedCode/TorquePerLength/UnitsNet.NanoFramework.TorquePerLength.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/TorquePerLength/packages.config
#	UnitsNet.NanoFramework/GeneratedCode/Turbidity/UnitsNet.NanoFramework.Turbidity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/VitaminA/UnitsNet.NanoFramework.VitaminA.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/Volume/UnitsNet.NanoFramework.Volume.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/VolumeConcentration/UnitsNet.NanoFramework.VolumeConcentration.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/VolumeFlow/UnitsNet.NanoFramework.VolumeFlow.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/VolumeFlowPerArea/UnitsNet.NanoFramework.VolumeFlowPerArea.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/VolumePerLength/UnitsNet.NanoFramework.VolumePerLength.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/VolumetricHeatCapacity/UnitsNet.NanoFramework.VolumetricHeatCapacity.nuspec
#	UnitsNet.NanoFramework/GeneratedCode/WarpingMomentOfInertia/UnitsNet.NanoFramework.WarpingMomentOfInertia.nuspec
#	UnitsNet.NumberExtensions.Tests/UnitsNet.NumberExtensions.Tests.csproj
#	UnitsNet.NumberExtensions/UnitsNet.NumberExtensions.csproj
#	UnitsNet.Serialization.JsonNet.Tests/UnitsNet.Serialization.JsonNet.Tests.csproj
#	UnitsNet.Serialization.JsonNet/UnitsNet.Serialization.JsonNet.csproj
#	UnitsNet.Serialization.JsonNet/UnitsNetBaseJsonConverter.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/AreaMomentOfInertiaTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/DensityTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/EntropyTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/MolarEntropyTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/SpecificEntropyTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/SpecificFuelConsumptionTestsBase.g.cs
#	UnitsNet.Tests/GeneratedCode/TestsBase/WarpingMomentOfInertiaTestsBase.g.cs
#	UnitsNet.Tests/QuantityParserTests.cs
#	UnitsNet.Tests/UnitParserTests.cs
#	UnitsNet.Tests/UnitsNet.Tests.csproj
#	UnitsNet/CustomCode/UnitParser.cs
#	UnitsNet/GeneratedCode/Resources/SpecificEntropy.restext
#	UnitsNet/GeneratedCode/Resources/SpecificFuelConsumption.restext
#	UnitsNet/UnitsNet.csproj
@angularsen angularsen added this to the v6 milestone Apr 11, 2025
@angularsen angularsen merged commit 8991f43 into master Apr 11, 2025
5 of 6 checks passed
@angularsen angularsen deleted the release/v6 branch April 11, 2025 10:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

v6 as master, feature freeze of v5
9 participants