2013-05-16 4 views
53

Я использую VS2010, и я попытался добавить несколько сборок с локального жесткого диска в мой проект C# через ссылку на файл. Заглянув в файл csproj, я обнаружил, иногда ссылка на файл появляется какПонимание сборки сборки csproj

<Reference Include="name"> 

Однако иногда это выглядит как

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

Что может вызвать разницу?


Вдохновленный ответом k3b, я сделал еще одно испытание. Я создал новый проект библиотеки классов.

  1. Добавить ссылку на файл. Начальное значение Конкретная версия in Свойства pane is False. csproj файл выглядеть

    <Reference Include="Name"> 
        <HintPath>...</HintPath> 
    </Reference> 
    
  2. Изменение Конкретная версия в Свойства панели, чтобы Истинного. VS добавляет версию в атрибут Include.

    <Reference Include="Name, Version=..."> 
        <HintPath>...</HintPath> 
    </Reference> 
    
  3. Изменение Конкретная версия в Свойства панели, чтобы Ложный снова. VS добавляет дочерний элемент SpecificVersion.

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

Таким образом, кажется, что правило:

  • Когда версия присутствует в Включите атрибут и нет SpecificVersion дочернего элемента, то файл сборка выполнена с возможностью Конкретная версия
  • Детский элемент SpecificVersion добавляется только со значением False.

Одна вещь, которую я до сих пор не понимаю:

  • Для моего нового тестового проекта, если удалить ссылку на файл и добавить его обратно, он возвращается в формат в пункте 1, который является по умолчанию.
  • Для моего существующего проекта, если я удаляю ссылку на файл и добавляю его обратно, я возвращаю формат в пункте 3. Хотя это также означает, что конкретная версия не используется, мне интересно, почему она не возвращается в формат в пункте 1.

ответ

26

Какой ссылочный тип вы получите, зависит от того, как вы связываете сборку.

  • выделить указанную сборку в проекте-исследователе
  • перейти к свойствам-странице

там вы найдете булев флаг «определенную версию»

  • истинные означает: сборка должна иметь версию = xxx
  • ложные средства: игнорировать монтажное исполнение

(У меня есть только немецкий-VS2010 поэтому английский перевод немецкого «Spezifische версия» может немного отличаться)

[обновление]

Я попытался следующие с помощью vcs2010-экспресс немецкий

добавить ссылку с по умолчанию SpecificVersion = False: нет версии

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

модифицированной г правочник: SpecificVersion = True: добавлена ​​версия

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

модифицирована ссылка снова: SpecificVersion = False: версия остается и новый элемент 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> 

кажется, что конкретная версия запоминается, но ignorede из-за <SpecificVersion>False</SpecificVersion>

+1

вы уверены? в моем VS2010 'SpecificVersion' является дочерним элементом элемента' Reference'. Не влияет на '' другое, что атрибуты игнорируются. –

+1

Я сделал тест. Специфическая версия сначала False. Затем я вручную отредактировал файл csproj, чтобы удалить информацию о версии. И затем я изменил конкретную версию на True. Я заметил, что VS вставил информацию о версии. Похоже, что это как-то связано с конкретной версией. Однако теперь мне интересно, почему VS не помнит мое последнее изменение. Даже я переустанавливаю конкретную версию на False и удаляю и читаю ссылку на сборку, информация о версии все еще вставлена. – intangible02

+1

Я подтверждаю ваши наблюдения. Обновил ответ соответственно. – k3b

Смежные вопросы