You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2008/2010旧项目NuGet配置升级至VS2017规范咨询

升级VS2008/2010项目NuGet配置到VS2017标准的安全指南

VS2017采用了自动包还原的原生支持,不再依赖旧的.nuget文件夹和手动导入的nuget.targets,下面是分步升级方案:

一、全局清理:移除解决方案级的.nuget文件夹

直接删除解决方案根目录下的.nuget子文件夹(包含NuGet.Config、NuGet.exe、NuGet.targets三个文件)——VS2017会通过IDE或MSBuild自动处理包还原,不需要这些旧文件。

二、逐个项目清理.csproj中的旧配置

针对你提到的三个旧项目,分别做如下调整:

1. 处理Proj1和Proj2

  • 移除所有指向$(SolutionDir)\.nuget\NuGet.targets的<Import>节点(包括带Condition的版本)
  • 保留与Microsoft.Bcl.Build相关的Import(如果项目确实依赖这个包):
    <Import Project="..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />
    
  • 更新EnsureNuGetPackageBuildImports目标,移除对.nuget\NuGet.targets的错误检查,只保留必要的包导入检查:
    <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
      <PropertyGroup>
        <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
      </PropertyGroup>
      <Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets'))" />
    </Target>
    

2. 处理Proj3

Proj3本身没有导入旧的nuget.targets,只需确认:

  • 保留Microsoft.Bcl.Build的Import节点(若依赖该包)
  • 确保EnsureNuGetPackageBuildImports目标仅检查该包的导入文件(和上面Proj1调整后的目标一致即可)

三、VS2017标准NuGet配置样式

VS2017新项目的NuGet配置核心特点是:

  • 无解决方案级.nuget文件夹
  • 仅导入项目依赖的NuGet包自身提供的.props或.targets文件(按需)
  • EnsureNuGetPackageBuildImports目标仅检查这些必要的导入文件,确保包还原完成后才能构建

以你的VS2017 Web应用项目为参考,标准配置示例(如果项目依赖Microsoft.Bcl.Build):

<!-- 仅导入实际依赖的包目标文件 -->
<Import Project="..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />

<!-- 确保包已还原的检查目标 -->
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
  <PropertyGroup>
    <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
  </PropertyGroup>
  <Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets'))" />
  <!-- 若有其他依赖包的导入文件,在此添加对应的Error检查节点 -->
</Target>

四、验证升级效果

  1. 保存所有修改后,用VS2017打开解决方案
  2. 右键解决方案 → 还原NuGet包(或等待IDE自动还原)
  3. 尝试构建所有项目,确认没有构建错误
  4. 若项目仍依赖Microsoft.Bcl.Build,可以考虑更新到最新兼容版本(如果项目允许),进一步对齐现代NuGet规范

内容的提问来源于stack exchange,提问作者Kjell Rilbe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:18:03