簡體   English   中英

VS.NET 2017強制在ASP.NET 2.0 Core應用程序中使用StackExchange.Redis 1.2.4.0

[英]VS.NET 2017 forces using StackExchange.Redis 1.2.4.0 in ASP.NET 2.0 Core app

我正在使用Visual Studio 2017.我剛剛創建了一個新的ASP.NET Core 2.0項目。 我試圖使用NuGet引入最新的StackExchange.Redis 1.2.6(截至9/3/2017)。

但是,一旦我這樣做,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?

找到原因。 這是因為默認情況下VS.NET 2017啟用了“允許NuGet下載丟失的包”。 構建屏幕也提到了這一點。

還原NuGet包...要防止NuGet在構建期間還原包,請打開“Visual Studio選項”對話框,單擊“包管理器”節點,然后取消選中“允許NuGet在構建期間下載缺少的包”。

在我的情況下,為了完全避免這個問題,我需要執行以下步驟來解決我的問題。

  1. 轉到Visual Studio選項對話框。
  2. 取消選中“允許NuGet下載丟失的軟件包”,以避免將來自動下載NuGet軟件包
  3. 打開NuGet Manager以添加最新的StackExchange.Redis包
  4. 單擊“清除所有NuGet緩存”以清除舊的NuGet緩存

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

我在我的重復問題中給出了相同的答案

我剛剛在一個包含許多項目的解決方案文件中遇到了類似的問題。 添加了一個nuget包,其中包含對已包含在其中一個項目中的包的* .StrongName.dll版本的依賴性。 由於它是一個依賴項,因此即使它出現在對象瀏覽器中,跟蹤StrongName版本被引用的位置也非常困難。 我終於能夠使用PowerShell控制台跟蹤它,以挖掘所有項目中的所有nuget項目依賴項,以找到重復的來源:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM