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>
我正在使用 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>