web-dev-qa-db-fra.com

Présentation d'une référence d'assembly csproj

J'utilise VS2010 et j'ai essayé d'ajouter quelques assemblys du disque dur local à mon projet C # via la référence de fichier. En jetant un œil dans le fichier csproj, j'ai parfois trouvé la référence du fichier

<Reference Include="name">

Cependant, il apparaît parfois

<Reference Include="name, Version=xxx, Culture=neutral, 
                                          processorArchitecture=MSIL">

Qu'est-ce qui pourrait causer la différence?


Inspiré par la réponse de k3b, j'ai fait un autre test. J'ai créé un nouveau projet de bibliothèque de classe.

  1. Ajoutez une référence de fichier. La valeur initiale de Version spécifique dans le volet Propriétés est Faux. Le fichier csproj ressemble à

    <Reference Include="Name">
      <HintPath>...</HintPath>
    </Reference>
    
  2. Remplacez Version spécifique dans le volet Propriétés par Vrai. VS ajoute une version dans l'attribut Include.

    <Reference Include="Name, Version=...">
      <HintPath>...</HintPath>
    </Reference>
    
  3. Remplacez Version spécifique dans Propriétés volet par Faux à nouveau. VS ajoute un élément enfant SpecificVersion.

    <Reference Include="Name, Version=...">
      <HintPath>...</HintPath>
      <SpecificVersion>False</SpecificVersion>
    </Reference>
    

Il semble donc que la règle soit:

  • Lorsque Version est présent dans l'attribut Include et qu'il n'y a pas d'élément enfant SpecificVersion, l'assembly de fichier est configuré pour être une version spécifique
  • L'élément enfant SpecificVersion est uniquement ajouté avec la valeur False.

Une chose que je ne comprends toujours pas:

  • Pour mon nouveau projet de test, si je supprime la référence de fichier et l'ajoute à nouveau, il revient au format au point 1, qui est la valeur par défaut.
  • Pour mon projet existant, si je supprime la référence de fichier et l'ajoute à nouveau, je récupère le format au point 3. Bien que cela signifie également que la version spécifique n'est pas utilisée, je me demande pourquoi elle ne revient pas au format au point 1 .
61
intangible02

Le type de référence que vous obtenez dépend de la façon dont vous liez l'assemblage.

  • sélectionner l'assembly référencé dans l'explorateur de projet
  • aller à la page des propriétés

vous y trouverez un drapeau booléen "Version spécifique"

  • true signifie: l'Assemblée doit avoir la version = xxx
  • false signifie: ignorer la version Assembly

(Je n'ai qu'un allemand-vs2010, donc la traduction en anglais de la version allemande "Spezifische" peut être légèrement différente)

[mise à jour]

J'ai essayé ce qui suit en utilisant l'allemand vcs2010-express

ajouter une référence avec DefaultVersion spécifique = False: pas de version

<Reference Include="Castle.Core">
  <HintPath>..\..\..\lib\fluentNHibernate\Castle.Core.dll</HintPath>
</Reference>

référence modifiée: SpecificVersion = True: version ajoutée

<Reference Include="Castle.Core, Version=2.5.1.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
  <HintPath>..\..\..\lib\fluentNHibernate\Castle.Core.dll</HintPath>
</Reference>

référence modifiée à nouveau: SpecificVersion = False: la version reste et nouvel élément SpecificVersion

<Reference Include="Castle.Core, Version=2.5.1.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
  <HintPath>..\..\..\lib\fluentNHibernate\Castle.Core.dll</HintPath>
  <SpecificVersion>False</SpecificVersion>
</Reference>

Il semble que la version spécifique soit mémorisée mais ignorée à cause de <SpecificVersion>False</SpecificVersion>

29
k3b