@@ -54,6 +54,27 @@ public static partial class torch
54
54
static bool nativeBackendCudaLoaded = false ;
55
55
56
56
public static string __version__ => libtorchPackageVersion ;
57
+ private static string NormalizeNuGetVersion ( string versionString )
58
+ {
59
+ if ( string . IsNullOrWhiteSpace ( versionString ) )
60
+ throw new ArgumentException ( $ "Invalid NuGet version: { versionString } ") ;
61
+
62
+ string [ ] parts = versionString . Split ( '-' , '+' ) ;
63
+ string [ ] versionParts = parts [ 0 ] . Split ( '.' ) ;
64
+
65
+ if ( versionParts . Length < 2 || versionParts . Length > 4 || ! versionParts . All ( IsNumeric ) )
66
+ throw new ArgumentException ( $ "Invalid NuGet version: { versionString } ") ;
67
+
68
+ string normalizedVersion = versionParts [ 0 ] + "." + versionParts [ 1 ] ;
69
+ if ( versionParts . Length > 2 ) normalizedVersion += "." + versionParts [ 2 ] ;
70
+ if ( versionParts . Length > 3 && int . Parse ( versionParts [ 3 ] ) != 0 ) normalizedVersion += "." + versionParts [ 3 ] ;
71
+
72
+ if ( parts . Length > 1 )
73
+ normalizedVersion += "-" + parts [ 1 ] ;
74
+
75
+ return normalizedVersion ;
76
+ }
77
+ private static bool IsNumeric ( string str ) => int . TryParse ( str , out _ ) ;
57
78
58
79
internal static bool TryLoadNativeLibraryFromFile ( string path , StringBuilder trace ) {
59
80
bool ok ;
@@ -168,16 +189,17 @@ private static void LoadNativeBackend(bool useCudaBackend, out StringBuilder? tr
168
189
169
190
if ( torchsharpLoc ! . Contains ( "torchsharp" ) && torchsharpLoc . Contains ( "lib" ) && Directory . Exists ( packagesDir ) && Directory . Exists ( torchsharpHome ) ) {
170
191
171
- var torchSharpVersion = Path . GetFileName ( torchsharpHome ) ; // really GetDirectoryName
172
-
192
+ var assembly = typeof ( torch ) . Assembly ;
193
+ var version = assembly . GetName ( ) . Version ;
194
+ var torchSharpVersion = ( version != null ) ? version . ToString ( ) : Path . GetFileName ( torchsharpHome ) ;
173
195
if ( useCudaBackend ) {
174
196
var consolidatedDir = Path . Combine ( torchsharpLoc , $ "cuda-{ cudaVersion } ") ;
175
197
176
198
trace . AppendLine ( $ " Trying dynamic load for .NET/F# Interactive by consolidating native { cudaRootPackage } -* binaries to { consolidatedDir } ...") ;
177
199
178
- var cudaOk = CopyNativeComponentsIntoSingleDirectory ( packagesDir , $ "{ cudaRootPackage } -*", libtorchPackageVersion , consolidatedDir , trace ) ;
200
+ var cudaOk = CopyNativeComponentsIntoSingleDirectory ( packagesDir , $ "{ cudaRootPackage } -*", NormalizeNuGetVersion ( libtorchPackageVersion ) , consolidatedDir , trace ) ;
179
201
if ( cudaOk ) {
180
- cudaOk = CopyNativeComponentsIntoSingleDirectory ( packagesDir , "torchsharp" , torchSharpVersion , consolidatedDir , trace ) ;
202
+ cudaOk = CopyNativeComponentsIntoSingleDirectory ( packagesDir , "torchsharp" , NormalizeNuGetVersion ( torchSharpVersion ) , consolidatedDir , trace ) ;
181
203
if ( cudaOk ) {
182
204
var consolidated = Path . Combine ( consolidatedDir , target ) ;
183
205
ok = TryLoadNativeLibraryFromFile ( consolidated , trace ) ;
@@ -193,9 +215,9 @@ private static void LoadNativeBackend(bool useCudaBackend, out StringBuilder? tr
193
215
194
216
trace . AppendLine ( $ " Trying dynamic load for .NET/F# Interactive by consolidating native { cpuRootPackage } -* binaries to { consolidatedDir } ...") ;
195
217
196
- var cpuOk = CopyNativeComponentsIntoSingleDirectory ( packagesDir , cpuRootPackage , libtorchPackageVersion , consolidatedDir , trace ) ;
218
+ var cpuOk = CopyNativeComponentsIntoSingleDirectory ( packagesDir , cpuRootPackage , NormalizeNuGetVersion ( libtorchPackageVersion ) , consolidatedDir , trace ) ;
197
219
if ( cpuOk ) {
198
- cpuOk = CopyNativeComponentsIntoSingleDirectory ( packagesDir , "torchsharp" , torchSharpVersion , consolidatedDir , trace ) ;
220
+ cpuOk = CopyNativeComponentsIntoSingleDirectory ( packagesDir , "torchsharp" , NormalizeNuGetVersion ( torchSharpVersion ) , consolidatedDir , trace ) ;
199
221
if ( cpuOk ) {
200
222
var consolidated = Path . Combine ( consolidatedDir , target ) ;
201
223
ok = TryLoadNativeLibraryFromFile ( consolidated , trace ) ;
0 commit comments