c# - manager - visual studio add reference to dll




Ajouter une référence à System.Core lorsqu'il est déjà référencé par le système de génération (3)

Visual Studio Intellisense ne reconnaît pas le mot clé dynamique, même si le projet est généré. J'ai essayé d'ajouter une référence à System.Core pour résoudre le problème. Je reçois cette erreur:

Une référence à 'System.Core' n'a pas pu être ajoutée. Ce composant est déjà référencé automatiquement par le système de génération.

J'ai remarqué que d'autres de mes projets System.Core référence à System.Core . Mon correctif était de l'ajouter en éditant directement le csproj, qui corrigeait le Intellisense. Ce qui donne? Pourquoi VS ne me laisse pas le faire via l'interface utilisateur?


Après avoir fait des recherches, tout ce que j'ai pu trouver, ce sont des billets de SO précédents et certains blogs, et finalement, ils ont tous utilisé le même travail que vous.

Ensuite, j'ai trouvé un rapport de bogue sur quelqu'un qui avait été enregistré sur Connect il y a quelques années, auquel il a finalement été répondu un an plus tard par Chuck England, un employé de MSFT.

TL; DR - Il s'agissait d'une décision consciente prise par l'équipe en raison de la fonctionnalité de multi-targeting ajoutée à VS2008 (capable de modifier la cible .NET Framework d'un projet).

Etant donné que le framework ciblé nécessite "System.Core", et que sa suppression empêcherait une génération (pour autant que je puisse comprendre la réponse de Chuck) , ils ont décidé de forcer une référence même si vous ne le voyez pas dans la liste de les références.

Un petit peu comme un "hack" de sécurité, vous pourriez dire, avec un effet secondaire indésirable que cela jette cette erreur lorsque vous essayez de l'ajouter à nouveau aux références, et vous devez éditer le fichier de projet directement.

Je doute que le billet disparaisse de leur site, mais voici une combinaison de ses deux réponses:

Oui, l'expérience n'est pas géniale. Puisque System.Core est requis, vous ne devez jamais le supprimer. Nous avons corrigé cela en l'ajoutant pour vous même si vous supprimez la référence. [A] s le message que vous avez vu indique, System.Core est implicitement référencé. Ainsi, le fait de l'avoir supprimé, autre que de supprimer physiquement une ligne du fichier de projet, n'a en rien modifié la version.

Il y a des scénarios légitimes où vous pourriez vouloir pouvoir faire cela, mais c'est un cas très virulent. Cependant, nous devrions ignorer aveuglément le fait que lorsque vous l'ajoutez, une erreur est générée. Une grande partie de ce qui nous a été imposé par les versions précédentes, qui ne comprenaient pas le multi-ciblage, n'a tout simplement pas été nettoyé.

Vous pouvez l'ajouter manuellement en cliquant avec le bouton droit sur le nœud du projet et en sélectionnant Décharger. Cliquez avec le bouton droit sur le nœud du projet et sélectionnez Modifier. Dans l'éditeur, copiez une autre ligne de référence (par exemple, celle pour "Système") et collez-la sous la référence d'origine dans le même groupe d'objets. Changez le nom de référence en "System.Core". Cliquez avec le bouton droit sur le nœud du projet et sélectionnez Recharger. Choisissez "oui" pour la question pour enregistrer et recharger.

VS2008 ne gérait pas correctement le multi-ciblage. Cela vous permettrait de construire des choses qui ne sont pas légitimes. Avec VS2010, nous nous sommes efforcés de faire en sorte que, s’il est conçu pour l’infrastructure cible, il soit exécuté sur l’infrastructure cible. Je ne peux pas dire que je connais des endroits où ce n'est pas vrai.

Nous ne pouvons pas revenir à la méthode VS2008, car elle ne comprend pas le multi-ciblage. Il ne comprenait pas non plus les vrais "profils", comme le profil client du framework .NET 4.0. En fait, le problème est dû au fait que le système VS2008 a été mis à niveau pour gérer le multi-ciblage et que le nouvel ensemble de règles rejette la référence.

Dans ce cas, nous construisons même si vous avez supprimé une référence. Vous pourriez dire, mais il ne devrait pas avoir construit. Mais, il fonctionnera sur le cadre ciblé et devrait donc avoir été construit. Le fait que nous ayons ajouté une référence "requise" pour vous est en quelque sorte une expérience brisée dans la façon dont elle a été développée.

Nous n’avons vraiment pas compris cela assez tôt, et avec une très bonne compréhension de la façon dont nous pourrions résoudre le problème avant d’avoir une solution. Mais, le fait que vous deviez toujours faire référence, et par conséquent ne jamais supprimer "System.Core", en a fait un Will not Fix, car 99% des clients ne le feraient jamais.


Récupéré en ajoutant manuellement ces lignes au fichier .csproj:

<Reference Include="System" />
<Reference Include="System.Core" />


bonjour là, je sais que ce post est déjà vieux mais pour ceux qui cherchent encore une solution, j'espère que cela pourra t'aider. Comme je suis également confronté au même problème parce que j'ai accidentellement supprimé la DLL System.Core.

Et ce que j'ai fait, c'est que j'ai copié cette DLL depuis C: \ Program Files (x86) \ Référence Assemblies \ Microsoft \ Framework.NETFramework \ v4.6.1 \ System.Core.dll et j'ai collé ces lib dans la corbeille de mon projet.

Plus tard, vous pouvez voir que dans votre projet, la DLL est ajoutée automatiquement dans la référence. Après cela, je redémarre mon vs et ça marche! Goodluck n espère qu'il peut résoudre votre problème





visual-studio-2013