Ajouter une référence au système.De base quand il est déjà référencé par le système de compilation

Visual Studio Intellisense ne reconnaît pas le mot-clé dynamique, même si le projet construit. 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 à un " Système.De base " n'a pas pu être ajouté. Ce composant est déjà référencés automatiquement par le système de compilation.

j'ai remarqué que d'autres de mes projets de référence System.Core. Ma correction a été de l'ajouter en éditant le csproj directement, qui a corrigé le IntelliSense. Ce qui donne? Pourquoi VS ne me laisse pas le faire par L'interface?

26
demandé sur Shaun Luttin 2014-08-20 04:20:35

4 réponses

après avoir fait quelques recherches, tout ce que j'ai pu trouver étaient des billets précédents et des blogs, et finalement ils ont tous fini par utiliser le même travail de contournement que vous avez fait.

puis j'ai trouvé un rapport de bogue quelqu'un a déposé une plainte sur Connect il y a quelques années, à laquelle Chuck England, un employé de MSFT, a répondu un an plus tard.

TL;DR - c'était une décision consciente que l'équipe a prise à cause du multi-ciblage ajout de la fonction VS2008 (être en mesure de changer la cible.net D'un projet).

puisque le cadre ciblé nécessite " un système.Core", et l'enlever empêcherait une construction (autant que je peux comprendre de Chuck réponse), ils ont décidé de forcer une référence même si vous ne la voyez pas dans la liste de références.

Un peu de "sécurité" hack", pourrait-on dire, avec un indésirable effets secondaires qu'il génère cette erreur lorsque vous essayez d'ajouter les références à nouveau, et vous finissez par avoir besoin d'éditer le fichier du projet directement.


je doute que le billet va disparaître à partir de leur site, mais ici, c'est une combinaison de deux de ses réponses en tout cas:

Oui, l'expérience n'est pas grande. Depuis Que Le Système.De base est nécessaire, vous ne devriez jamais l'enlever. 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, système.Core est implicitement référencé. Donc, le fait que vous avez supprimé, autres que physiquement la suppression d'une ligne dans le fichier de projet, n'a pas changé la construire en quelque sorte.

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

[vous pouvez ajouter manuellement retour par un clic-droit sur le noeud du projet et la sélection de Décharger. Cliquez à nouveau avec le bouton droit de la souris sur le noeud 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 originale à l'intérieur du même groupe D'articles. Remplacer le nom de référence par "System.Core." Cliquez-droit sur le noeud du projet et sélectionnez Recharger. Choisissez " Oui " pour la question à sauvegarder et recharger.

VS2008 n'a pas géré le multi-ciblage correctement. Elle permettrait de vous construire des choses qui n'étaient pas légitimes. Avec VS2010, nous avons fait tout ce qui était en notre pouvoir pour nous assurer que si le cadre cible était construit, il fonctionnerait sur le cadre 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 véritables "profils", comme le profil des clients du cadre.net 4.0. En fait, le problème que vous voyez est que le système VS2008 était mis à niveau pour gérer multi-ciblage, et c'est le nouvel ensemble de règles qui rejettent la référence.

Dans ce cas, nous construisons même si vous avez supprimé une référence. Vous pourriez dire, mais il n'aurait pas dû construire. Mais, il sera exécuté sur le cadre, et donc devrait avoir construit. Le fait que nous ayons ajouté un renvoi "requis" pour vous est en quelque sorte une expérience brisée dans la façon dont il a été élaboré.

nous n'avons vraiment pas attrapé cela assez tôt, et avec une compréhension vraiment solide de la façon dont nous pourrions le réparer pour obtenir une correction avant notre sortie. Mais, le fait que vous devriez toujours référence, et donc jamais supprimer "Système.De base", ne sera pas Corrigé, puisque ce n'est pas quelque chose que 99% des clients ne jamais le faire.

32
répondu Grant Winney 2014-08-20 01:12:59

récupéré en ajoutant manuellement ces lignes à la .csproj fichier:

<Reference Include="System" />
<Reference Include="System.Core" />
4
répondu Arthur 2018-03-06 18:06:27

en me basant sur la réponse de @Arthur, j'ai trouvé deux solutions:

Ajouter .csproj fichier, la ligne manquante:

<Reference Include="System.Core" />

Alors, selon un forums.asp.net réponse, ajouter le Système.Référence principale de l'assemblage--3-- > (ce n'est pas la seule vertu de Vues):

  <system.web>
    <compilation debug="true" targetFramework="4.7.1">
      <assemblies>
        <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </assemblies>
    </compilation>
    <httpRuntime targetFramework="4.7.1" />
    <!-- ... ... -->
  </system.web>

Puis:

1) assurer la version du .net framework pour la propriété de compilation dans web.la config est la même que celle spécifiée dans le projet propriété.

2) assurer la version de l'assemblage MVC dans le dossier views web.config est le même que L'assemblage MVC que vous utilisez dans votre projet.

3) redémarrez Visual Studio (2017 ici).

J'espère que cela vous aidera.

2
répondu woohoo 2018-04-12 15:33:04



Bonjour, je sais que ce post est déjà vieux mais pour ceux qui cherchent encore une solution, espérons que cela peut vous aider. Comme je fais aussi face au même problème parce que j'ai accidentellement supprimé le système.Core dll.



et ce que j'ai fait c'est que j'ai copié cette dll de C:\Program fichiers (x86)\reference Assemblies\Microsoft\Framework.Netfram framework\v4.6.1\System.Core.dll et j'ai collé ces lib dans mon projet bac.



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

1
répondu warabino 2017-09-28 07:00:16