I have tested transformation from WGS84 (EPSG 4326) to "RT90 2.5 gon V" (EPSG 3021) using the file "SRID.csv" and a "SridReader" like you suggested here:
https://github.com/NetTopologySuite/ProjNet4GeoAPI/wiki/Loading-a-projection-by-Spatial-Reference-ID
I used the following input WGS84 coordinate:
Longitude/Latitude: 18.059196 , 59.330231
The expected result should be the following:
X/Y: 1628294 , 6580994
The above coordinates is the result from e.g. these sites:
https://kartor.eniro.se
https://www.hitta.se/kartan
https://epsg.io/transform
https://mygeodata.cloud/cs2cs/
http://tasks.arcgisonline.com/arcgis/rest/services/Geometry/GeometryServer/project
When I use the "SRID.csv" shipped with ProjNet4GeoAPI I get the following result (skipping the decimals below):
X/Y: 1628102 , 6580875
The X/Y difference is 192/119 meters compared to the expected result (i.e. the result from the above websites).
The row for EPSG 3021 looks like this in the shipped file "SRID.csv":
3021;PROJCS["RT90 2.5 gon V",GEOGCS["RT90",DATUM["Rikets_koordinatsystem_1990",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],AUTHORITY["EPSG","6124"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4124"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15.80827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","3021"]]
However, when I change the file to the following then the expected result is achieved:
3021;PROJCS["RT90 2.5 gon V",GEOGCS["RT90",DATUM["Rikets_koordinatsystem_1990",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[414.1,41.3,603.1,-0.855,2.141,-7.023,0],AUTHORITY["EPSG","6124"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4124"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15.80827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3021"],AXIS["X",NORTH],AXIS["Y",EAST]]
I found the above row by testing a definition I found at SharpMap's SpatialRefSys.xml:
https://github.com/SharpMap/SharpMap/blob/fdb61e5cb4133000f903ba40f8f0bb4d95bead39/SharpMap/Converters/WellKnownText/SpatialReference.cs
Uri("https://raw.githubusercontent.com/SharpMap/SharpMap/Branches/1.0/SharpMap/SpatialRefSys.xml")
The SpatialRefSys.xml contains this section for 3021:
<ReferenceSystem>
<SRID>3021</SRID>
<PROJ4>+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs </PROJ4>
PROJCS["RT90 2.5 gon V",GEOGCS["RT90",DATUM["Rikets_koordinatsystem_1990",SPHEROID["Bessel 1841",6377397.155,299.1528128,AUTHORITY["EPSG","7004"]],TOWGS84[414.1,41.3,603.1,-0.855,2.141,-7.023,0],AUTHORITY["EPSG","6124"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4124"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",15.80827777777778],PARAMETER["scale_factor",1],PARAMETER["false_easting",1500000],PARAMETER["false_northing",0],AUTHORITY["EPSG","3021"],AXIS["X",NORTH],AXIS["Y",EAST]]
</ReferenceSystem>
Then I took the row with "PROJCS" and used in the "SRID.csv" after the "3021;" and then the result became correct.