Понимание справочной системы csproj
Я использую VS2010, и я попытался добавить несколько сборок с локального жесткого диска на мой проект С# через ссылку на файл. Заглянув в файл csproj
, я обнаружил, что ссылка на файл появляется как
<Reference Include="name">
Однако иногда это выглядит как
<Reference Include="name, Version=xxx, Culture=neutral,
processorArchitecture=MSIL">
Чем может быть разница?
Вдохновленный ответом k3b, я сделал еще один тест. Я создал новый проект библиотеки классов.
-
Добавьте ссылку на файл. Исходное значение Специфицированной версии в панели Свойства - False. Файл csproj
выглядит как
<Reference Include="Name">
<HintPath>...</HintPath>
</Reference>
-
Измените конкретную версию в панели "Свойства" на "Истина". VS добавляет версию в атрибут Include
.
<Reference Include="Name, Version=...">
<HintPath>...</HintPath>
</Reference>
-
Снова измените конкретную версию в панели свойств на False. VS добавляет дочерний элемент SpecificVersion
.
<Reference Include="Name, Version=...">
<HintPath>...</HintPath>
<SpecificVersion>False</SpecificVersion>
</Reference>
Итак, кажется, что правило:
- Когда версия присутствует в атрибуте Include и нет дочернего элемента
SpecificVersion
, сборка файла настроена на определенную версию
- Детский элемент
SpecificVersion
добавляется только со значением False.
Одна вещь, которую я до сих пор не понимаю:
- Для моего нового тестового проекта, если я удалю ссылку на файл и добавлю его обратно, он вернется к форматированию в точке 1, которая по умолчанию.
- Для моего существующего проекта, если я удалю ссылку на файл и добавлю его обратно, я верну формат в пункте 3. Хотя это также означает, что конкретная версия не используется, мне интересно, почему она не возвращается в формат в пункте 1.
Ответы
Ответ 1
Какой ссылочный тип вы получите, зависит от того, как вы связываете сборку.
- выберите ссылочную сборку в проекте-проводнике
- перейдите на страницу свойств
там вы найдете логический флаг "конкретная версия"
- true означает: сборка должна иметь версию = xxx
- false означает: игнорировать версию сборки
(У меня есть только german-vs2010, поэтому английский перевод для немецкой "Spezifische Version" может немного отличаться)
[обновление]
Я попробовал следующее, используя vcs2010-express german
добавить ссылку с по умолчанию 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>