Понимание ссылки на сборку csproj

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

<Reference Include="name">

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

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

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


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

  1. Добавить ссылку на файл. Начальное значение " Определенная версия" на панели свойств - " Ложь". csproj файл выглядит как

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

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

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

Итак, похоже, что правило таково:

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

Одно я до сих пор не понимаю

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

1 ответ

Решение

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

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

там вы найдете логический флаг "конкретная версия"

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

(У меня есть только German-vs2010, поэтому английский перевод немецкой "Spezifische Version" может немного отличаться)

[Обновить]

Я попробовал следующее, используя vcs2010-express немецкий

добавить ссылку со значением по умолчанию 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>

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

Другие вопросы по тегам