Клиент StackExchange.Рэдис.StrongName рефренируется, но не входит в пакет

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

тип "ConnectionMultiplexer" существует в обоих " StackExchange.Рэдис.Строгое_имя, версия=1.2.4.0, культура=нейтральных, PublicKeyToken=c219ff1ca8c2ce46 " и " клиент StackExchange.Redis, версия=1.2.6.0, культура=нейтральная, PublicKeyToken=null'

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

4 ответов


можно использовать Strongname во всем приложении, 1.2.6 новее и будет использоваться. Проблема при добавлении Рэдис.Stackexchange у вас будет одно и то же пространство имен из двух разных dll. Компилятор .Net не знает, какой из них использовать. Если вам нужно 1.2.6, используйте Строгое_имя версия в приложении и нет больше проблем ....


Я добавил условный флаг в " 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>

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

добавив Это (ниже) в мой csproj:

<Target Name="ChangeAliasesOfStrongNameAssemblies" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
  <ItemGroup>
    <ReferencePath Condition="'%(FileName)' == 'StackExchange.Redis.StrongName'">
      <Aliases>signed</Aliases>
    </ReferencePath>
  </ItemGroup>
</Target>

Microsoft.Увеличение.Кэширование.Redis 2.0, который поставляется с Asp .Net Core 2.0, внутренне использует StackExchange.Рэдис.StrongName, Version=1.2.4.0, что есть например в C:\Program файлы\dotnet\sdk\NuGetFallbackFolder\stackexchange.Рэдис.strongname\1.2.4\lib\netstandard1.5 папка.

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