2013-05-16 14 views
53

Sto usando VS2010 e ho cercato di aggiungere alcuni assembly dal disco rigido locale al mio progetto C# tramite il riferimento ai file. Sbirciare nel file csproj, ho trovato a volte il riferimento al file viene visualizzato comeInformazioni su un riferimento all'assembly csproj

<Reference Include="name"> 

Tuttavia a volte appare come

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

Che cosa potrebbe causare la differenza?


Ispirato alla risposta di k3b, ho fatto un altro test. Ho creato un nuovo progetto di libreria di classi.

  1. Aggiungere un riferimento al file. Il valore iniziale di Versione specifica in Proprietà riquadro è False. Il look csproj di file come

    <Reference Include="Name"> 
        <HintPath>...</HintPath> 
    </Reference> 
    
  2. Change versione specifica in Proprietà riquadro per Vero. VS aggiunge la versione nell'attributo Include.

    <Reference Include="Name, Version=..."> 
        <HintPath>...</HintPath> 
    </Reference> 
    
  3. Change versione specifica in Proprietà riquadro per False nuovo. VS aggiunge un elemento figlio SpecificVersion.

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

così sembra che la regola è:

  • Quando versione è presente in Includere attributo e non v'è alcun elemento SpecificVersion bambino, il gruppo di file è configurato per essere Versione specifica
  • L'elemento figlio SpecificVersion viene aggiunto al valore False.

Una cosa che continuo a non capire:

  • Per il mio nuovo progetto di test, se rimuovere il riferimento al file e aggiungi di nuovo indietro, si torna al formato di cui al punto 1, che è il predefinito.
  • Per il mio progetto esistente, se rimuovo il riferimento al file e lo aggiungo di nuovo, torno formato nel punto 3. Anche se ciò significa che non viene utilizzata la versione specifica, mi chiedo perché non torni in formato al punto 1.

risposta

26

Quale tipo di riferimento si ottiene dipende da come si collega l'assieme.

  • selezionare l'assembly di riferimento nel progetto-explorer
  • passare alle proprietà pagine

ci si trova un flag booleano "versione specifica"

  • vero mezzo: la assembly deve avere versione = xxx
  • false significa: ignorare la versione dell'assembly

(ho solo un tedesco-VS2010 così la definizione inglese per il tedesco "spezifische Version" potrebbe essere leggermente differente)

[aggiornamento]

Ho provato quanto segue utilizzando vcs2010-esprimono tedesco

aggiungi riferimento con SpecificVersion default = false: nessuna versione

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

r modificato Riferimenti: SpecificVersion = True: versione aggiunto

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

modificata di riferimento di nuovo: SpecificVersion = False: versione rimane e nuovo elemento 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> 

Sembra che la versione specifica viene ricordato, ma ignorede causa di <SpecificVersion>False</SpecificVersion>

+1

sei sicuro? nel mio VS2010, 'SpecificVersion' è figlio dell'elemento' Reference'. Non ha alcun impatto su '' other che gli attributi sono ignorati. –

+1

Ho fatto un test. La versione specifica inizialmente è False. Ho quindi modificato manualmente il file csproj per rimuovere le informazioni sulla versione. E poi ho cambiato la versione specifica in True. Ho osservato che VS ha inserito le informazioni sulla versione. Quindi sembra che sia in qualche modo collegato alla versione specifica. Tuttavia, mi chiedo ora perché VS non ricorda il mio ultimo cambiamento. Anche io resettare la versione specifica su False e rimuovere e readd il riferimento all'assembly, le informazioni sulla versione sono ancora inserite. – intangible02

+1

Confermo le vostre osservazioni. Aggiornato di conseguenza la risposta. – k3b