C# 解决NuGet版本冲突

C# 解决NuGet版本冲突,c#,dependencies,nuget,roslyn-code-analysis,C#,Dependencies,Nuget,Roslyn Code Analysis,我正在尝试通过NuGet安装更新: Microsoft.AspNetCore.Mvc 1.1.2 --> 2.0.4 但是,更新从未成功,因为它在遇到以下冲突后回滚: Version conflict detected for Microsoft.CodeAnalysis.CSharp. Reference the package directly from the project to resolve this issue. Web -> Microsoft.AspNetCo

我正在尝试通过NuGet安装更新:

Microsoft.AspNetCore.Mvc 1.1.2 --> 2.0.4
但是,更新从未成功,因为它在遇到以下冲突后回滚:

Version conflict detected for Microsoft.CodeAnalysis.CSharp. Reference the package directly from the project to resolve this issue.


Web -> Microsoft.AspNetCore.Mvc 2.0.4 -> Microsoft.AspNetCore.Mvc.RazorPages 2.0.4 -> 
Microsoft.AspNetCore.Mvc.Razor 2.0.4 -> Microsoft.CodeAnalysis.CSharp (>= 2.3.1) 

Web -> Microsoft.VisualStudio.Web.CodeGeneration.Design 1.1.0 -> 
Microsoft.VisualStudio.Web.CodeGeneration.Utils 1.1.0 ->
 Microsoft.CodeAnalysis.CSharp.Workspaces 1.3.0 -> 
Microsoft.CodeAnalysis.CSharp (= 1.3.0).
因此,从我的理解来看,
Microsoft.codesanalysis.CSharp
是罪魁祸首,因为
Microsoft.AspNetCore.Mvc
具有要求其至少为
v2.3.1
的依赖项,而
Microsoft.VisualStudio.Web.CodeGeneration.Design
也具有要求其为
v1.3.0


我不知道如何解决这个问题。它确实说
直接从项目中引用包来解决这个问题
,但我真的不明白这意味着什么以及如何做。

如果您直接添加依赖项包(在这种情况下,将NuGet包
Microsoft.CodeAnalysis.CSharp
添加到您的项目中)Visual Studio将使用直接引用包的版本,而不是在其他包的依赖项中指定的版本。通过这种方式,您指定了如何通过安装依赖项的特定版本来解决冲突

您可以像添加任何其他NuGet软件包一样添加此引用:在VisualStudio中,右键单击project->“管理NuGet软件包…”搜索
Microsoft.CodeAnalysis.CSharp
,然后安装它。

如果您有还原所有NuGet的项目的“软件包”目录,还有一个PowerShell脚本可以快速检查多个Nuget版本冲突:

$dir = "C:\packages"
$nugets = Get-ChildItem -Path $dir -Directory | ?{ $_.PSIsContainer } | ForEach-Object { $_.Name }
$nCount = $nugets.Count

Write-Host "Found $nCount nuggets in '$dir' direcotry"

$nugetObjects = $nugets | %{ [pscustomobject]@{ Name = $_ -replace '\.([0-9]).*([0-9])$'; Version = $_ -replace '^([A-Za-z]).*([A-Za-z])\.' }} | Group-Object "Name"

$conflicts = $nugetObjects | Where-Object {$_.Count -gt 1}
if ($conflicts.Count -gt 0) {
    Write-Host "Found Nuget multiuple versions"
    $conflicts
}
else {
    Write-Host "Jey - Not found any Nuget version conflicts"
}