2016-05-26 2 views
1

Dans Visual Studio 2015, je voudrais supprimer ce genre d'avertissements:Comment supprimer les avertissements de référence d'assembly dans Visual Studio?

enter image description here

Cependant, ils ne semblent pas avoir un identifiant d'avertissement, donc je ne peux pas appliquer des solutions comme this .


Je comprends les mises en garde, mais ils ne sont pas résoluble dans une friendlly façon, donc je veux les cacher, mon projet est déjà la manipulation de ces ensembles properlly, mais je vais vous expliquer pourquoi les avertissements ne sont pas résoluble:

Ma solution a deux configurations de solution, une pour compiler la solution sous .NetFx4 et l'autre pour .NetFx45, pour cela j'utilise une constante de coompilation conditionnelle et aussi une étape manuelle car je dois changer manuellement le cadre de ciblage de la solution après changement la configuration de la solution, de sorte que les assemblys donne un avertissement lorsque la solution est configurée pour cibler .NetFx4 à la place .NetFx45, cependant, dans l'explorateur de solution l'assemblage Les variables sont réglées pour ne JAMAIS les copier dans le dossier deplyment, et les classes qui importent ces assemblages sont dans des constantes de compilation conditionnelles, donc il y a vraiment un risque d'erreur.

Répondre

2

Ce sont des avertissements MSBuild, pas des avertissements d'analyse de compilateur ou de code. Vous devriez être en mesure de voir les codes d'erreur (par exemple: MSB3268) dans la fenêtre de sortie de Visual Studio même s'ils n'apparaissent pas dans la liste des erreurs. Cela dit, cacher ces éléments n'est pas trivial puisque ni les pragmas ni les attributs SuppressMessage ne fonctionneront pour ceux-ci. La tâche MSBuild ResolveAssemblyReference génère ces avertissements et, bien que ses propriétés semblent empêcher les avertissements d'être générés, elles ne fonctionnent pas complètement lorsque vous ciblez le framework v4.0. (Même si elles ont fonctionné, leur utilisation nécessite également de surcharger la cible ResolveAssemblyReferences importée via Microsoft.CSharp.targets pour envoyer des valeurs aux propriétés de la tâche, ce qui ajouterait un problème de maintenance à long terme).

Il y a une chose qui va vraiment aider ici: indiquer que les références ne doivent pas être incluses lors du ciblage du framework 4.0. par exemple. (Dans votre fichier .csproj):

<ItemGroup> 
    <Reference Include="System" /> 
    <Reference Include="System.Core" /> 
    ... 
</ItemGroup> 
<ItemGroup Condition="'$(TargetFrameworkVersion)' != 'v4.0'"> 
    <Reference Include="Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> 
    <HintPath>..\packages\Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory.4.0.209160138-alpha\lib\net45\Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory.dll</HintPath> 
    <Private>True</Private> 
    </Reference> 
    ... 
</ItemGroup> 

Le bit important est la condition sur la deuxième ItemGroup, qui indique MSBuild d'inclure les références dans le groupe que lorsque le cadre cible n'est pas 4.0.

Puisque cette approche correspond assez bien à votre intention, il semble préférable de supprimer les avertissements (même si c'était possible). Cependant, il y a un petit hic: l'EDI va quand même générer un avertissement "le composant référencé n'a pas pu être trouvé" pour chacun des assemblages référencés directement, et rien ne semble pouvoir être fait pour empêcher cela. D'un autre côté, un avertissement par assemblage exclu directement référencé est déjà un peu meilleur qu'un avertissement pour chaque assemblage de framework référencé par chacun des assemblages référencés directement ...