J'ai passé l'année dernière (à temps partiel) à migrer mon application Windows 8.1 existante (et réussie) vers Windows 10 UWP. Maintenant, juste avant de le relâcher au magasin, j'ai testé l'application dans le mode de construction "Release" (qui déclenche .NET Native). Tout semblait fonctionner jusqu'à ce que, par hasard, je remarque un bug subtil mais sérieux (car compromettant les données). Il m'a fallu deux jours pour le réduire à ces trois lignes de code:Éviter les bogues .NET natifs
var array1 = new int[1, 1];
var array2 = (int[,])array1.Clone();
array2[0, 0] = 666;
if (array1[0, 0] != array2[0, 0]) {
ApplicationView.GetForCurrentView().Title = "OK.";
} else {
ApplicationView.GetForCurrentView().Title = "Bug.";
}
En mode débogage, le clonage du tableau 2D signifie modification d'un élément de tableau ne modifie pas l'autre tableau. En mode Release, la modification d'un tableau modifie également l'autre. (J'utilise le dernier VS 2017.)
Maintenant, j'ai réalisé que l'utilisation de .NET Native 1.6 (qui n'est pas la valeur par défaut dans VS 2017), résout ce problème particulier. Mais j'ai perdu la foi en .NET Native. Combien de bogues sont toujours introduits par .NET Native dans mon application? Mon application Windows 8.1 s'exécute rapidement et en douceur sans .NET Native. Alors pourquoi devrais-je utiliser .NET Native qui semble être plein de bugs? (J'ai appris beaucoup de bugs .NET natifs ces deux derniers jours.)
Récemment, le projet "UWP Desktop Bridge" a permis de publier des applications de bureau traditionnelles sur l'App Store (ils n'ont pas besoin d'être utilisés). NET Native). Alors pourquoi dois-je utiliser .NET Native?
Existe-t-il un moyen d'ignorer totalement .NET Native? Sinon, puis-je configurer le compilateur .NET natif pour qu'il ne se comporte pas de manière aussi destructive?
Pas une réponse à votre question mais je dois dire, de telles choses sont à prévoir. UWP est une excellente plateforme mais elle n'est pas encore mature.La première chose que je ferais une fois que j'ai vérifié le bug est de le soumettre à MS afin qu'ils finissent par le réparer. – stybl
Évitez 'Clone()'. Toujours. Il n'a jamais été défini de manière adéquate. Utilisez 'Array.Copy()' ici à la place. –
(non testé) Dans l'onglet de construction du projet UWP, vous pouvez décocher la case «compiler avec la chaîne d'outils .NET Native» lorsque vous choisissez le mode de libération. Est-ce que cela ne fonctionne pas lors de la création de paquets? –