Понимание ссылки на сборку csproj
Я использую VS2010, и я попытался добавить несколько сборок с локального жесткого диска в мой проект C# с помощью ссылки на файл. Заглянуть в csproj
файл, я обнаружил, что иногда ссылка на файл выглядит как
<Reference Include="name">
Однако иногда это выглядит как
<Reference Include="name, Version=xxx, Culture=neutral,
processorArchitecture=MSIL">
Что может вызвать разницу?
Вдохновленный ответом k3b, я сделал еще один тест. Я создал новый проект библиотеки классов.
Добавить ссылку на файл. Начальное значение " Определенная версия" на панели свойств - " Ложь".
csproj
файл выглядит как<Reference Include="Name"> <HintPath>...</HintPath> </Reference>
Измените конкретную версию на панели свойств на True. VS добавляет версию в
Include
приписывать.<Reference Include="Name, Version=..."> <HintPath>...</HintPath> </Reference>
Измените конкретную версию на панели свойств снова на 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>