程序集参考版本号令人困惑。最新版本是 3.2.3.0,那么为什么所有参考文献都说 3.0.0.0?

Assembly reference version numbers are confusing. Lastest verison is 3.2.3.0, so why do all references say 3.0.0.0?

VS 项目程序集引用不一致

我通过 NuGet 安装了 System.Web.WebPages.Razor.dll 版本 3.2.3.0。当我在 VisualStudio 项目资源管理器中打开引用并查看该引用的属性 window 时,它显示版本 3.0.0.0。同样,System.Web.WebPages.dll 显示版本 3.0.0.0,尽管安装了版本 3.2.3.0。如果我打开 *.csproj 文件,引用是 <Reference Include="System.Web.WebPages, Version=3.0.0.0 但它有一个子节点显示:<HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.dll</HintPath>

那么,首先,为什么它似乎在任何地方都被引用为版本 3.0.0.0,而 NuGet 包声称它是 3.2.3.0,并且引用具有指向该特定程序集的提示路径。 Microsoft 是否发布了同一程序集的不同版本...都具有相同的版本号 (3.0.0.0)?

我认为这可能与 "Specific Version" 选项设置为 false 有关,但后来我看到其他引用的 DLL,例如 System.Web.Mvc 显示版本 5.2.3.0,尽管也将 "Specific Version" 设置为 false。为什么会有这种差异?

web.config 程序集引用不一致

与此同时,在 web.config 文件中,system.web.webPages.razor 部分引用 System.Web.WebPages.Razor 版本 [=38] 程序集中的 hostpages 元素类型=]3.0.0.0,甚至认为 NuGet 包说它的版本是 3.2.3.0.

与*.csproj 文件中的提示路径类似,web.config 文件在 configuration/runtime/assemblyBinding/dependentAssembly 下有一个条目 System.Web.WebPages,其中包含子元素 <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.2.3.0" />

无论如何,似乎 System.Web.WebPages.dllSystem.Web.WebPages.Razor.dll(但不是 System.Web.Mvc.dll?)的每次更新都保持相同的版本号 (3.0.0.0),但随后使用提示路径和绑定重定向以定位特定的颠覆。这是怎么回事?

我认为关键是一些参考资料(一打 NuGet 包)需要版本 3.1.X.X 而其他人使用 3.2.X.X,而另一个使用 3.0.X.X,等等。他们几乎从来没有引用过完全相同的版本。公开的代码库(签名)不会随版本改变,只有一些错误修复。

通过使用绑定重定向,无需在任何地方设置(非常)特定版本的程序集版本。使用最新版本(程序集绑定重定向中 newversion 中设置的版本)。全部做完。 运行!