【问题标题】:VS.NET 2017 forces using StackExchange.Redis 1.2.4.0 in ASP.NET 2.0 Core appVS.NET 2017 强制在 ASP.NET 2.0 Core 应用程序中使用 StackExchange.Redis 1.2.4.0
【发布时间】:2018-02-12 05:35:41
【问题描述】:

我正在使用 Visual Studio 2017。我刚刚创建了一个新的 ASP.NET Core 2.0 项目。我试图使用 NuGet 来获取最新的 StackExchange.Redis 1.2.6(截至 2017 年 9 月 3 日)。

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

错误 CS0433 类型“RedisResult”同时存在于“StackExchange.Redis.StrongName, Version=1.2.4.0, Culture=neutral, PublicKeyToken=c219ff1ca8c2ce46”和“StackExchange.Redis, Version=1.2.6.0, Culture=neutral, PublicKeyToken=null' 服务器 C:\git\Splash\Server\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?

【问题讨论】:

    标签: c# asp.net-core .net-core stackexchange.redis


    【解决方案1】:

    我刚刚在一个包含多个项目的解决方案文件中遇到了类似的问题。添加了一个 nuget 包,其中包含对已包含在其中一个项目中的包的 *.StrongName.dll 版本的依赖项。由于它是一个依赖项,即使 StrongName 版本出现在对象浏览器中,追踪引用的位置也非常困难。我终于能够使用 PowerShell 控制台来追踪它,以挖掘所有项目中的所有 nuget 项目依赖项,以找到重复的来源:

    dir -Recurse **\project.assets.json | Select-String -pattern "{{dll name}}"
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        正在恢复 NuGet 包... 要防止 NuGet 在构建过程中恢复包,请打开 Visual Studio 选项对话框,单击包管理器节点并取消选中“允许 NuGet 在构建过程中下载丢失的包”。

        就我而言,为了完全避免这个问题,我需要执行以下步骤来解决我的问题。

        1. 转到 Visual Studio 选项对话框。
        2. 取消选中“允许 NuGet 下载丢失的包”以避免以后自动下载 NuGet 包
        3. 打开 NuGet 管理器以添加最新的 StackExchange.Redis 包
        4. 单击“清除所有 NuGet 缓存”以清除旧的 NuGet 缓存

        【讨论】:

          猜你喜欢
          • 2018-03-04
          • 2018-10-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-16
          • 1970-01-01
          • 2018-05-16
          • 2018-06-09
          相关资源
          最近更新 更多