Я начинаю новый проект, используя StackExchange.Redis и .Net Core 2.0. Но я получаю конфликт

Тип «ConnectionMultiplexer» существует как в «StackExchange.Redis.StrongName, версии = 1.2.4.0, Culture = нейтральный, PublicKeyToken = c219ff1ca8c2ce46», так и в «StackExchange.Redis, Version = 1.2.6.0, Culture = нейтральный, PublicKeyToken = null»

Почему это показывает, даже если я не ссылаюсь на StackExchange.Redis.StrongName, и это даже не та же версия сборки?

14
Lejdholt 5 Сен 2017 в 08:44

4 ответа

Лучший ответ

Я добавил условный флаг в пакет «StackExchange.Redis», чтобы он работал. Я опробовал это решение на двух новых проектах на двух машинах. Не спрашивайте меня, почему это работает.

    <Project Sdk="Microsoft.NET.Sdk.Web">
      <PropertyGroup>
        <TargetFramework>netcoreapp2.0</TargetFramework>
      </PropertyGroup>

      <ItemGroup>
        <Folder Include="wwwroot\" />
      </ItemGroup>

      <ItemGroup>
        <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
      </ItemGroup> 
      <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
        <PackageReference Include="StackExchange.Redis" Version="1.2.6" />
      </ItemGroup>

    </Project>
4
Shimmy Weitzhandler 26 Ноя 2017 в 04:27

Я нашел свое решение здесь.

Добавив это (ниже) к моему csproj:

<Target Name="ChangeAliasesOfStrongNameAssemblies" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
  <ItemGroup>
    <ReferencePath Condition="'%(FileName)' == 'StackExchange.Redis.StrongName'">
      <Aliases>signed</Aliases>
    </ReferencePath>
  </ItemGroup>
</Target>
15
Stephen Rauch 13 Фев 2018 в 03:47

Microsoft.Extensions.Caching.Redis 2.0, который поставляется с Asp .Net Core 2.0, внутренне использует StackExchange.Redis.StrongName, версия = 1.2.4.0, например, в C: \ Program Files \ dotnet \ sdk \ NuGetFallbackFolder \ stackexchange. папка redis.strongname \ 1.2.4 \ lib \ netstandard1.5.

Похоже, это вызывает конфликт между различными версиями StackExchange.Redis.

0
Glory 6 Окт 2017 в 13:35

Можно использовать Strongname во всем приложении, 1.2.6 новее и будет использоваться. Проблема в том, что когда вы добавляете Redis.Stackexchange, у вас будет одинаковое пространство имен из двух разных DLL. Компилятор .Net не знает, какой использовать. Если вам нужен 1.2.6, используйте версию StrongName в приложении и никаких проблем ...

5
André 14 Ноя 2017 в 07:41