Comment laisser un xproject Visual Studio 2015 (project.json) référencer le plus haut framework d’un projet dépendant

Je crée une bibliothèque réutilisable qui cible plusieurs plates-formes (.NET 4.0, .NET 4.5, .NETStandard 1.0 et .NETStandard 1.3). La version .NET 4.5 de ce projet contient certaines fonctionnalités qui ne sont pas disponibles sous la version .NET 4.0.

Le projet de test unitaire qui référence ce projet de bibliothèque a une seule plate-forme cible, à savoir NET 4.5.1. Ce projet de test contient évidemment du code qui teste les fonctionnalités spécifiques à .NET 4.5 de la bibliothèque principale.

Malheureusement, toutefois, le projet de test ne comstack pas car Visual Studio semble faire référence à la version .NETStandard 1.0, qui ne contient évidemment pas cette fonctionnalité.

Pour démontrer mon problème, j’ai réduit cela aux deux projets suivants:

Bibliothèque de base:

{ "version": "1.0.0-*", "frameworks": { "netstandard1.0": { "dependencies": { "NETStandard.Library": "1.6.0" } }, "net40": {}, "net45": {} } } 

Fichier de code:

 namespace CoreLibrary { #if NETSTANDARD1_0 public class ClassNetStandard { } #endif #if NET40 public class ClassNet40 { } #endif #if NET45 public class ClassNet45 { } #endif } 

Bibliothèque de test:

 { "version": "1.0.0-*", "dependencies": { "CoreLibrary": { "target": "project" } }, "frameworks": { "net451": {} } } 

Code:

 // This comstacks new CoreLibrary.ClassNetStandard(); // This doesn't. // error: Type or namespace 'ClassNet40' does not exist in namespace 'CoreLibrary' new CoreLibrary.ClassNet40(); // error: Type or namespace 'ClassNet45' does not exist in namespace 'CoreLibrary' new CoreLibrary.ClassNet45(); 

Que dois-je changer pour permettre à mon projet de test unitaire de comstackr et de tester les fonctionnalités spécifiques .NET 4.5?

Il semble y avoir un bogue dans les outils Visual Studio pour .NET Core. Lorsque vous faites référence à un projet multi-framework à partir d’un autre projet – Visual Studio extrait uniquement le premier framework répertorié d’une liste (dans votre cas, “netstandard1.0”) et traite ce projet référencé comme étant unique ciblé pour ce framework. Cependant, le compilateur gère cela correctement, et bien qu’il semble que le projet se construit correctement, en réalité il ne le fait pas. D’autre part, lorsque vous utilisez la définition de ClassNet45 – il semble que la compilation ne soit pas effectuée (Visual Studio affiche des erreurs) – la compilation est vraiment réussie.

Il semble que les outils Visual Studio pour .NET Core ne soient pas encore assez perfectionnés, mais ce problème sera probablement résolu dans un proche avenir.