2017-09-04 68 views
3

我正在使用Visual Studio 2017.我刚刚创建了一个新的ASP.NET Core 2.0项目。我试图使用NuGet来拉入最新的StackExchange.Redis 1.2.6(截至2017年9月3日)。VS.NET 2017部队在ASP.NET 2.0中使用StackExchange.Redis 1.2.4.0核心应用程序

但是,一旦我这样做了,Visual Studio就会抱怨我的一个RedisResult变量中存在冲突的引用。它说

错误CS0433类型 'RedisResult' 在两个存在 'StackExchange.Redis.StrongName,版本= 1.2.4.0,文化=中性公钥= c219ff1ca8c2ce46' 和“StackExchange.Redis,版本= 1.2.6.0文化=中性公钥=空”服务器C:\ git的\飞溅\服务器\ BackPlaneConnection \ Channel.cs 19主动

然后,我发现我并不真的需要手动添加任何NuGet包为了在我的ASP.NET Core 2.0应用程序中使用StackExchange.Redis。事实上,如果我手动添加对不同版本的StackExchange.Redis的引用,它会导致上面显示的解决冲突。

检查构建输出。该DLL实际上来自C:\ Program Files \ dotnet \ sdk \ NuGetFallbackFolder \ stackexchange.redis.strongname

我试着删除stackexchange.redis.strongname,但它仍然以某种方式自动下载到我的个人nuget文件夹。

它几乎感觉像ASP.NET Core 2.0内部需要StackExchange.Redis 1.2.4.0,但这对我来说确实没有意义。

我在使用ASP.NET Core 1.1时没有同样的问题。有什么办法让我的ASP.NET Core 2.0使用NuGet中最新的StackExchange.Redis?

回答

1

找到原因。这是因为默认情况下VS.NET 2017打开了“允许NuGet下载缺失的软件包”。构建屏幕也提到了这一点。

恢复的NuGet包... 为了防止从的NuGet构建过程中恢复的包,打开Visual Studio的选项对话框中,单击包管理器节点上,取消选中“允许的NuGet构建过程中下载缺失的软件包。”

在我的情况下,要完全避免此问题,我需要执行以下步骤来解决我的问题。

  1. 转到Visual Studio选项对话框。
  2. 取消“允许的NuGet下载缺失的软件包”在未来
  3. 打开的NuGet Manager会自动以避免下载NuGet包中添加最新的StackExchange.Redis包
  4. 点击“清除所有的Nu​​Get缓存(S)”来清理旧的NuGet缓存
0

我向“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> 

I gave the same answer in my duplicate question

相关问题