Nuget 什么';这是当前的impl。在csproj里有多少人?

Nuget 什么';这是当前的impl。在csproj里有多少人?,nuget,visual-studio-2017,csproj,nuget-package-restore,Nuget,Visual Studio 2017,Csproj,Nuget Package Restore,我有一些始于VS2008或VS2010之类的解决方案。它们包含一些我认为与NuGet包还原相关的内容,并在构建过程中包含某些MS NuGet包 但这在不同的项目中看起来有所不同,而我看不出有任何差异的原因,一个新的VS2017项目包含另一个不同的版本 那么,在这方面,我可以安全地做些什么来更新我的旧项目——在VS2017中,它现在应该是什么样子 两个旧解决方案都包含一个解决方案级子文件夹“.nuget”,其中包含三个文件:nuget.Config、nuget.exe和nuget.targets

我有一些始于VS2008或VS2010之类的解决方案。它们包含一些我认为与NuGet包还原相关的内容,并在构建过程中包含某些MS NuGet包

但这在不同的项目中看起来有所不同,而我看不出有任何差异的原因,一个新的VS2017项目包含另一个不同的版本

那么,在这方面,我可以安全地做些什么来更新我的旧项目——在VS2017中,它现在应该是什么样子

两个旧解决方案都包含一个解决方案级子文件夹“.nuget”,其中包含三个文件:
nuget.Config
nuget.exe
nuget.targets

旧的
.csproj
文件包含以下NuGet stuff的“版本”:

Proj1:

<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
<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'))" />
</Target>

此项目引用此计算机上缺少的NuGet包。使用NuGet Package Restore下载它们。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=322105. 缺少的文件是{0}。
项目J2(附加条件):


此项目引用此计算机上缺少的NuGet包。启用NuGet软件包还原以下载它们。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=322105. 缺少的文件是{0}。
Proj3(不导入nuget.targets):


此项目引用此计算机上缺少的NuGet包。使用NuGet Package Restore下载它们。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=322105. 缺少的文件是{0}。
新的VS2017 web应用程序项目(不导入nuget.targets或Microsoft.Bcl.Build.1.0.21,不同的
标记):


此项目引用此计算机上缺少的NuGet包。使用NuGet Package Restore下载它们。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=322105. 缺少的文件是{0}。
我希望所有这些旧项目都有相同的设置(除非有特殊原因需要不同),并且我希望设置与VS2017中的工具和环境保持一致

我已经启用了自动包还原,并希望保持这种状态

注意:所有四个项目似乎都成功构建和运行。Proj2和Proj3是单元测试项目。Proj1实际上是两个在这方面完全相同的项目

当前的impl是什么。在csproj里有多少人

要解决此问题,您可以执行以下步骤:

  • 关闭Visual Studio以避免潜在的文件锁定和冲突
  • 如果使用TFS:从解决方案的
    .nuget
    文件夹中删除
    nuget.exe
    nuget.targets
    ,并从解决方案工作区中删除这些文件。使用disableSourceControlIntegration设置保留
    nuget.config
    ,如中所述

  • 如果未使用TFS:从解决方案和解决方案工作区中删除
    .nuget
    文件夹

  • 编辑解决方案中的每个项目文件,删除
    元素,并删除对nuget.targets文件的任何引用

     <RestorePackages>true</RestorePackages>
    
    true
    

    <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
    
    <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">  
      <PropertyGroup>    
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable 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('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
    </Target>
    
    
    此项目引用此计算机上缺少的NuGet包。启用NuGet软件包还原以下载它们。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=322105. 缺少的文件是{0}。
    

  • 注意:保留
    谢谢!将阅读我在下面部分找到的.lsn文件中的参考。我应该移除它吗<代码>项目(“{2150E333-8FDC-42A3-9474-1A3956D46DE8}”)=“.nuget”、“.nuget”、“{9CD7B238-A979-4D2C-9E09-586BBF9C4162}”项目部分(解决方案项)=preProject.nuget\nuget.Config=.nuget\nuget.Config.nuget\nuget.exe=.nuget\nuget.exe.nuget\nuget.targets=.nuget\nuget.targets EndProjectSection EndProject
    我删除了它(上面的部分,来自.sln文件)。似乎有效。我发现有一种新的.csproj格式,带有标记
    PackageReference
    ,但它似乎不支持遗留的.Net Framework项目。这仍然是正确的还是已修复?我该如何进行转换?另外,它是否有助于升级到目标.Net Framework 4.7.1(现在显然包括完整的.Net标准2.0)?新的.csproj格式仍然支持旧的.Net Framework项目,您可以将其转换为新的.csproj:,如果您有任何具有目标Framework.Net标准2.0的项目,您可以升级到目标Framework 4.7.1。对不起,我不太明白你的评论。我已经读了你链接的文章,它似乎说它不适用于非核心ASP.NET应用程序(如我的)。但是这篇文章已经有将近一年的历史了,所以我想也许情况已经改变了?
    <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.Net.Compilers.2.1.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.2.1.0\build\Microsoft.Net.Compilers.props'))" />
      <Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.7\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.7\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
    </Target>
    
     <RestorePackages>true</RestorePackages>
    
    <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
    
    <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">  
      <PropertyGroup>    
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable 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('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
    </Target>