StackExchange.Redis.StrongName是refrenced但不包含在包中

时间:2017-09-05 05:44:29

标签: asp.net-core stackexchange.redis asp.net-core-2.0

我正在使用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,它甚至不是相同的程序集版本?

4 个答案:

答案 0 :(得分:8)

我找到了解决方案here

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:4)

我在&#34; StackExchange.Redis&#34;中添加了一个条件标志。包,这使它工作。我在两台机器上的两个新项目上尝试了这个解决方案。不要问我为什么会这样做。

    <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>

答案 3 :(得分:0)

与Asp .Net Core 2.0一起提供的Microsoft.Extensions.Caching.Redis 2.0在内部使用StackExchange.Redis.StrongName,Version = 1.2.4.0,例如在C:\ Program Files \ dotnet \ sdk \ NuGetFallbackFolder中\ stackexchange.redis.strongname \ 1.2.4 \ lib \ netstandard1.5文件夹。

所以看起来它导致不同版本的StackExchange.Redis之间发生冲突。