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