安装指定版本2.3.12的Nuget包RazorGenerator.Mvc报错如何解决?
问题根因
RazorGenerator.Mvc 2.3.12版本的安装逻辑默认优先检索全局程序集缓存(GAC)中的System.Web.Mvc程序集,你项目中通过Nuget安装的Microsoft.AspNet.Mvc不会自动写入GAC,因此触发找不到程序集的报错。
解决方案
方案1:强制安装后手动配置引用(推荐,无需修改全局环境)
- 执行带忽略依赖参数的安装命令,跳过安装阶段的程序集校验:
Install-Package RazorGenerator.Mvc -Version 2.3.12 -IgnoreDependencies - 安装完成后手动给项目添加System.Web.Mvc引用:右键项目→选择「添加」→「引用」→浏览到项目packages目录下对应版本Microsoft.AspNet.Mvc包中的System.Web.Mvc.dll,添加到项目引用中。
- 打开项目根目录下的
Web.config文件,在<runtime>节点的<assemblyBinding>子节点下添加绑定重定向规则,将所有版本的System.Web.Mvc指向你项目实际安装的版本,示例规则如下:
<dependentAssembly> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-[你安装的MVC版本号].0" newVersion="[你安装的MVC版本号].0" /> </dependentAssembly>
请将上述配置中的[你安装的MVC版本号]替换为项目实际安装的Microsoft.AspNet.Mvc对应版本号,例如5.2.9
- 重新生成项目,验证没有引用报错即可正常使用。
方案2:临时注册System.Web.Mvc到GAC(适合本地开发场景)
- 找到项目中已安装的System.Web.Mvc.dll路径,默认路径为
项目根目录\packages\Microsoft.AspNet.Mvc.[版本号]\lib\net4*\System.Web.Mvc.dll - 以管理员身份启动Visual Studio的开发者命令提示符(Developer Command Prompt),执行如下命令将dll注册到全局程序集缓存:
gacutil /i "System.Web.Mvc.dll的完整本地路径" - 注册完成后回到Visual Studio的包管理器控制台,执行原安装命令即可正常安装:
Install-Package RazorGenerator.Mvc -Version 2.3.12 - 安装完成后若不需要保留GAC中的System.Web.Mvc,可执行
gacutil /u System.Web.Mvc移除全局注册。
内容的提问来源于stack exchange,提问作者Tm Son
相关产品推荐
相关产品推荐

