目前的影响是什么? .csproj中的NuGet内容?

时间:2018-01-23 09:30:46

标签: nuget visual-studio-2017 csproj nuget-package-restore

我有一些从VS2008或VS2010开始的解决方案或类似的东西。它们包含一些我认为与NuGet包恢复有关的东西,包括构建过程中的某些MS NuGet包。

但是在不同的项目中看起来有所不同,但我认为没有任何差异的理由,而新的VS2017项目包含另一个不同的版本。

那么,我能做些什么才能让我的旧项目在这方面保持最新状态 - 在VS2017中它应该是什么样子?

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

旧的.csproj文件包含NuGet内容的这些“版本”:

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>

Proj2(附加条件):

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

Proj3(不导入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>

新的VS2017 Web应用程序项目(不导入nuget.targets或Microsoft.Bcl.Build.1.0.21,不同的<Error Condition.../>标记):

<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>

我希望为所有这些旧项目设置相同的设置(除非有特殊原因可以区分),并且我希望设置与VS2017的工具和环境保持同步。

我启用了自动包恢复,并希望保持这种状态。

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

1 个答案:

答案 0 :(得分:1)

  

当前的影响是什么。 .csproj中的NuGet东西?

要解决此问题,您可以按照以下步骤操作:

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

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

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

     <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>
    
  5. 注意:保留<Import Project="..\packages\Microsoft.Bcl.Build...

    有关详细信息,请参阅:

    Nuget: Switching from "Enable Package Restore" to "Automatic Package Restore"