2013-05-16 7 views
53

J'utilise VS2010 et j'ai essayé d'ajouter quelques assemblages à partir du disque dur local à mon projet C# par référence de fichier. Fureter dans le fichier csproj, je trouve parfois la référence du fichier apparaît commeComprendre une référence d'assembly csproj

<Reference Include="name"> 

Cependant parfois, il apparaît comme

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

Quelle est la cause de 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 classes.

  1. Ajouter une référence de fichier. La valeur initiale de Version spécifique dans Les propriétés volet est Faux. Le regard du fichier csproj comme

    <Reference Include="Name"> 
        <HintPath>...</HintPath> 
    </Reference> 
    
  2. changement version spécifique dans Propriétés volet pour vrai. VS ajoute la version dans l'attribut Include.

    <Reference Include="Name, Version=..."> 
        <HintPath>...</HintPath> 
    </Reference> 
    
  3. changement version spécifique dans Propriétés volet à 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 est:

  • Lorsque version est présent dans Inclure attribut et il n'y a aucun élément de l'enfant SpecificVersion, l'ensemble de fichier est configuré pour être Version spécifique
  • L'élément enfant SpecificVersion est uniquement ajouté avec la valeur Faux.

Une chose que je ne comprends toujours pas:

  • Pour mon nouveau projet de test, si je retire la référence du fichier et l'ajouter à nouveau, il remonte au format au point 1, qui est le défaut.
  • Pour mon projet existant, si je supprime la référence du fichier et la rajoute, 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 retourne pas au format au point 1.

Répondre

26

Le type de référence que vous obtenez dépend de la manière dont vous liez l'assemblage.

  • sélectionnez l'assembly référencé dans le projet-explorateur
  • aller aux propriétés page

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

  • véritables moyens: le l'assemblage doit avoir la version = xxx
  • faux signifie ignorer la version d'assemblage

(j'ai seulement un allemand-VS2010 donc la traduction française de la "Spezifische Version" allemand peut être légèrement différent)

[mise à jour]

J'ai essayé le suivant à l'aide vcs2010-express allemand

ajouter une référence avec défaut SpecificVersion = False: aucune version

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

r modifié eference: SpecificVersion = True: Version ajouté

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

à nouveau référence modifié: SpecificVersion = False: 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 est mémorisé mais ignorede à cause de <SpecificVersion>False</SpecificVersion>

+1

êtes-vous sûr? Dans mon VS2010, 'SpecificVersion' est un enfant de l'élément' Reference'. Cela n'a aucun impact sur '' autre que les attributs sont ignorés. –

+1

J'ai fait un test. La version spécifique est initialement False. J'ai ensuite édité manuellement le fichier csproj pour supprimer les informations de version. Et puis j'ai changé la version spécifique à True. J'ai observé que VS inséré les informations de version. Il semble donc que cela soit en quelque sorte lié à la version spécifique. Cependant, je me demande maintenant pourquoi VS ne se souvient pas de mon dernier changement. Même si je réinitialise Version Spécifique à False et supprime et readd la référence d'assembly, les informations de version sont toujours insérées. – intangible02

+1

Je confirme vos observations. Mis à jour la réponse en conséquence. – k3b

Questions connexes