VS2017发布.NET项目自动添加冗余DLL及VS2013运行时异常问题
嗨,我来帮你拆解这两个问题,一步步解决你的困扰:
为什么VS2013发布时会提示Razor缺失?
虽然你的项目里没有cshtml文件,也没用到Razor视图,但** .NET Framework 4.5.1的Web应用项目模板默认会引入ASP.NET Web Pages/Razor相关的依赖配置**,哪怕你没实际使用这些功能。VS2013的发布机制对这类默认配置的依赖检测非常严格:
- 你的web.config里大概率残留了Razor相关的配置条目,比如
<assemblies>节点里的System.Web.WebPages.Razor引用、<pages>下的Razor命名空间,或者<runtime>里的绑定重定向 - VS2013会根据这些配置判定项目需要Razor组件,发布时找不到对应的DLL就会抛出“Razor缺失”的错误
如何阻止VS2017发布冗余DLL且避免运行时错误?
你尝试的<PreserveCompilationContext>false</PreserveCompilationContext>确实能阻止VS2017复制Razor DLL,但报错是因为项目配置里还残留着对这些DLL的依赖引用,运行时CLR依然会尝试加载它们。得配合清理冗余配置才能彻底解决:
第一步:彻底移除项目中不必要的Razor/Web Pages依赖
- 打开你的
.csproj文件,查找并删除所有和以下程序集相关的<Reference>节点:System.Web.Mvc.dllSystem.Web.Razor.dllSystem.Web.Webpages.Deployment.dllSystem.Web.Webpages.Razor.dll
- 打开
web.config文件,做这些清理:- 找到
<assemblies>节点,删除包含System.Web.WebPages、System.Web.WebPages.Razor、System.Web.Mvc的<add>元素 - 找到
<pages>节点下的<namespaces>,删除所有Razor/MVC相关的命名空间(比如System.Web.Mvc、System.Web.Mvc.Ajax等) - 查找
<runtime>下的<assemblyBinding>,删除所有针对上述程序集的绑定重定向条目
- 找到
第二步:配置VS2017的发布行为
- 在
.csproj文件中添加以下配置(如果还没加的话):
这个属性会告诉编译器不要保留编译上下文,避免自动复制Razor相关的冗余DLL。<PreserveCompilationContext>false</PreserveCompilationContext> - 优化发布选项:在VS2017的发布向导中,切换到「设置」选项卡,找到「文件发布选项」,勾选**「仅部署运行时所需的文件」**。这个选项会让VS自动分析项目的实际依赖,只复制真正需要的文件。
最后验证
完成上述操作后,先执行「生成 -> 清理解决方案」,再重新生成项目,然后发布。检查发布目录里是否还有那些冗余DLL,同时测试应用运行是否正常,应该就能解决问题了。
内容的提问来源于stack exchange,提问作者esmehsnj
相关产品推荐
相关产品推荐

