如何避免将NuGet包存入预SDK风格Visual Studio项目的源码控制?
.NET Framework ASP.NET MVC项目不存NuGet包到源码控制的可行方案及错误解决
完全可以让.NET Framework的ASP.NET MVC项目不把Packages文件夹提交到源码控制,这也是NuGet官方推荐的做法,能大幅减少仓库体积,避免冗余文件的同步问题。你遇到的还原错误是可以解决的,具体步骤如下:
解决NuGet还原失败的问题
你遇到的Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets缺失错误,通常是以下原因导致,对应解决方法:
1. 修复包引用或切换到PackageReference
- 如果项目用的是旧版的
packages.config,检查.csproj文件中是否存在对该target文件的硬编码相对路径引用。如果有,删除后重新通过NuGet安装该包,让引用路径自动修正。 - 更推荐的方式是迁移到PackageReference:右键项目 → 管理NuGet包 → 点击顶部齿轮图标(设置)→ 默认包管理格式选择
PackageReference。这种模式下,包会下载到全局NuGet缓存(%userprofile%\.nuget\packages),不需要本地Packages文件夹,还原更稳定。
2. 强制重新安装缺失的包
打开Visual Studio的包管理器控制台,运行以下命令:
Update-Package -reinstall Microsoft.CodeDom.Providers.DotNetCompilerPlatform
这个命令会强制卸载并重新安装该包,确保所有相关文件都被正确下载。
3. 清理NuGet缓存
如果缓存损坏也会导致还原失败,手动删除全局缓存中对应的包文件夹:
- 打开文件资源管理器,导航到
%userprofile%\.nuget\packages\microsoft.codedom.providers.dotnetcompilerplatform - 删除整个
3.6.0版本文件夹,然后右键解决方案 → 还原NuGet包。
正确配置不提交Packages文件夹到源码控制
1. 添加忽略规则
- 如果用Git,在项目根目录创建或编辑
.gitignore文件,添加一行:
Packages/
- 如果用TFS,在源代码管理资源管理器中找到
Packages文件夹,右键 → 高级 → 忽略此本地项。
2. 移除已提交的Packages文件夹
如果已经把Packages提交到仓库,需要先从源码控制中移除(不会删除本地文件):
- Git环境下,在终端运行:
git rm -r --cached Packages git commit -m "Remove Packages folder from source control"
- TFS环境下,右键
Packages文件夹 → 删除 → 选择“只从源代码控制中删除,保留本地文件”,然后提交变更。
3. 开启自动还原确保团队一致
让所有开发人员开启Visual Studio的自动还原设置:
工具 → 选项 → NuGet包管理器 → 常规,勾选“允许NuGet下载缺失的包”和“在生成期间自动检查缺失的包”,这样拉取代码后会自动还原所需包。
内容的提问来源于stack exchange,提问作者abenci
相关产品推荐
相关产品推荐

