Che cosa indica la versione 255.255.255.255 per i file winmd?

Ho notato che la maggior parte dei file (tutti?) .Winmd ha una versione di 255.255.255.255 come:

Windows, versione = 255.255.255.255, Culture = neutro, PublicKeyToken = null

Le app Metro hanno un riferimento a tali assembly con questo numero di versione.


Ulteriori riferimenti a Windows.winmd si riferiscono a:

mscorlib, Version = 255.255.255.255, Culture = neutral, PublicKeyToken = b77a5c561934e089

Tuttavia, un assembly con questo numero di versione non esiste, per quanto ne so.

Questo numero di versione ha un significato speciale? C’è qualche documentazione per questo?

I gruppi ECMA 335 devono avere un numero di versione. Ma l’algoritmo di risoluzione del tipo runtime di Windows non utilizza il numero di versione, quindi il team che creava il formato winmd ha scelto un numero di versione arbitrario di 255.255.255.255 per il numero di versione dell’assembly.

Ciò aiuta a garantire che nessuno tenti di utilizzare l’algoritmo di risoluzione di tipo .Net quando si esegue la risoluzione del tipo (non è perfetto, purtroppo alcuni strumenti usano ancora l’algoritmo di risoluzione di tipo .Net).

Oh e il riferimento mscorlib è un riferimento pro-forma – ECMA 335 richiede che tutti i typeref abbiano un assemblyref corrispondente e il formato file WINMD abbia scelto di usare typerefs per determinati tipi di ECMA 335 come indicatori di un tipo specifico. Ad esempio, il costrutto “enum” winrt è rappresentato come un tipo che estende “System.Enum” – per un file winmd la parte “System.Enum” è solo una stringa (potrebbe essere qualsiasi cosa) e non può essere risolta in un vero tipo. Quella stringa è rappresentata nei metadati come typeref e typeref devono avere un assemblyref – abbiamo scelto di usare la versione mscorlib di System.Enum come assemblyref per l’enum perché era conveniente.

Tieni presente che i file .winmd contengono metadati per le interfacce WinRT. Windows non può presumere che verrà utilizzata una versione particolare di .NET. Windows 8 sarà molto più lungo di .NET 4.5

Né può un progetto .NET presupporre che verrà eseguito su qualsiasi versione particolare di Windows. Dovrebbe funzionare altrettanto bene su Windows 8 come su Windows 10.

Quindi interpretare 255.255.255.255 come “qualsiasi versione”.