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


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

<Reference Include="name">

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

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

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


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

  1. Добавить файл ссылка. Начальное значение Конкретной Версии in свойства и ложные. Элемент csproj файл выглядит как

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

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

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

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

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

одной вещи я до сих пор не знаю поймите:

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

1 ответ:

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

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

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

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

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

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

я попробовал следующее С помощью vcs2010-express german

добавить ссылку с default 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>