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を参照しておらず、同じアセンブリバージョンでもないのに、なぜこれが表示されるのですか?
「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>
私は自分の解決策を見つけました ここ 。
これ(以下)を私のcsprojに追加することによって:
<Target Name="ChangeAliasesOfStrongNameAssemblies" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
<ItemGroup>
<ReferencePath Condition="'%(FileName)' == 'StackExchange.Redis.StrongName'">
<Aliases>signed</Aliases>
</ReferencePath>
</ItemGroup>
</Target>
アプリケーション全体でStrongnameを使用することが可能です。1.2.6が新しく、使用されます。問題は、Redis.Stackexchangeを追加すると、2つの異なるdllから同じ名前空間が作成されることです。 .Netコンパイラはどちらを使用するかを認識していません。 1.2.6が必要な場合は、アプリケーション全体でStrongNameバージョンを使用すれば、問題は発生しません。
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の異なるバージョン間で競合が発生しているように見えます。