web-dev-qa-db-ja.com

StackExchange.Redis.StrongNameは参照されていますが、パッケージとして含まれていません

StackExchange.Redisと.NetCore2.0を使用して新しいプロジェクトを開始しています。しかし、私は衝突します:

タイプ「ConnectionMultiplexer」は、「StackExchange.Redis.StrongName、Version = 12..4.0、Culture = neutral、PublicKeyToken = c219ff1ca8c2ce46」と「StackExchange.Redis、Version = 12..6.0、Culture = neutral、PublicKeyToken = null」の両方に存在します。

StackExchange.Redis.StrongNameを参照しておらず、同じアセンブリバージョンでもないのに、なぜこれが表示されるのですか?

14
Lejdholt

「StackExchange.Redis」パッケージに条件付きフラグを追加して、機能させました。このソリューションを、2台のマシンの2つの新しいプロジェクトで試しました。なぜそれが機能するのか私に聞かないでください。

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

私は自分の解決策を見つけました ここ

これ(以下)を私のcsprojに追加することによって:

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

アプリケーション全体でStrongnameを使用することが可能です。1.2.6が新しく、使用されます。問題は、Redis.Stackexchangeを追加すると、2つの異なるdllから同じ名前空間が作成されることです。 .Netコンパイラはどちらを使用するかを認識していません。 1.2.6が必要な場合は、アプリケーション全体でStrongNameバージョンを使用すれば、問題は発生しません。

5
André

Asp .Net Core2.0に同梱されているMicrosoft.Extensions.Caching.Redis2.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の異なるバージョン間で競合が発生しているように見えます。

0
Glory