#.net
#.net
Вопрос:
- Project BaseApp — это библиотека .NET Standard 2.0.
- Его ссылки на пакеты включают LaunchDarkly .ServerSdk версии 5.13.1 и LaunchDarkly.ServerSdk.Redis версии 1.1.1.
- Есть ссылка на транзитивный пакет из LaunchDarkly.ServerSdk.Redis запускается быстро.ServerSdk версии 5.6.4 — это минимальная версия, которая запускается быстро.Требуется ServerSdk.Redis.
Вышеуказанное работает просто отлично. У нас никогда не было проблем, когда мы обновляли зависимость BaseApp от LaunchDarkly.ServerSdk для любой версии в диапазоне 5.6.5 … 5.13.1; он правильно разрешает переходную зависимость для использования более высокой версии.
Однако сейчас я тестирую предварительную версию: я обновил зависимость BaseApp от LaunchDarkly.ServerSdk до версии 5.14.0-альфа.1. Это вызвало ошибки сборки, подобные этой:
error CS0012: The type 'IFeatureStoreFactory' is defined in an assembly that is not referenced. You must add a reference to assembly 'LaunchDarkly.ServerSdk, Version=5.6.4.0, Culture=neutral, PublicKeyToken=f86add69004e6885'. [/app/src/BaseApp/BaseApp.csproj]
Тип IFeatureStoreFactory — это интерфейс, который определен в LaunchDarkly .ServerSdk и реализован в LaunchDarkly.ServerSdk.Redis (вот почему последний в первую очередь зависит от первого, поэтому он знает, какой интерфейс он реализует). И интерфейс определенно присутствует в более новой версии — нет изменений, несовместимых с обратной связью. Но он ведет себя так, как будто ничего, кроме типа интерфейса из версии 5.6.4, не приемлемо.
Это библиотека, а не приложение (несмотря на «Приложение» в названии), поэтому привязка перенаправлений не задействована. Опять же, до сих пор это работало как шарм, поэтому я уверен, что есть какая-то разница, которую я просто не заметил. Новая версия является предварительной версией, но я не могу понять, почему это имеет значение — 5.14.0-alpha.1 будет ниже, чем 5.14.0, но все равно выше, чем 5.6.4.
Я надеюсь, что это не дубликат — есть много вопросов «определено в сборке, на которую нет ссылок», но ни один из тех, которые я видел, не соответствует этой ситуации.
Комментарии:
1. Я подумал, что могу получить некоторые подсказки, просмотрев
package.assets.json
до и после моего изменения (поскольку восстановление пакета выполняется успешно — ошибка во время компиляции). Но я не вижу здесь разницы; как в более ранней версии, которая работает, так и в текущей, которая выходит из строя, она показывает новейшую версиюLaunchDarkly.ServerSdk
на верхнем уровне (например, это то, что она на самом деле загружает), а переходная зависимость отLaunchDarkly.ServerSdk.Redis
toLaunchDarkly.ServerSdk
— это именно то, что было первоначально объявлено как(5.6.4).
Ответ №1:
Ага! Ответ заключается в том, что одна из этих версий имеет строгое имя, а другая — нет, поэтому .NET не считает, что у них одинаковое имя сборки.