StackExchange.Redis.StrongName 被引用但未作为包包含

StackExchange.Redis.StrongName is refrenced but not included as package

我正在使用 StackExchange.Redis 和 .Net Core 2.0 开始一个新项目。 但是我遇到了冲突:

类型 'ConnectionMultiplexer' 存在于 'StackExchange.Redis.StrongName, Version=1.2.4.0, Culture=neutral, PublicKeyToken=c219ff1ca8c2ce46' 和 'StackExchange.Redis, Version=1.2.6.0, Culture=neutral, PublicKeyToken=null'

即使你没有引用 StackExchange.Redis.StrongName 并且它甚至不是相同的程序集版本,为什么也会显示?

我在 "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>

Microsoft.Extensions.Caching.Redis 2.0 Asp .Net Core 2.0 内部使用 StackExchange.Redis.StrongName,Version=1.2.4.0,例如 C:\Program Files\dotnet\sdk\NuGetFallbackFolder\stackexchange.redis.strongname.2.4\lib\netstandard1.5 文件夹。

看来这会导致 StackExchange.Redis 的不同版本之间发生冲突。

可以在整个应用程序中使用 Strongname,1.2.6 较新,将被使用。问题是当您添加 Redis.Stackexchange 时,您将拥有来自两个不同 dll 的相同命名空间。 .Net 编译器不知道使用哪一个。如果您需要 1.2.6,请在整个应用程序中使用 StrongName 版本,不会再有问题....

我找到了我的解决方案 here

通过将此(下方)添加到我的 csproj:

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