目前的影响是什么? .csproj 中的 NuGet 内容?
What's the current impl. of NuGet stuff in .csproj?
我有一些解决方案是从 VS2008 或 VS2010 或类似的东西开始的。它们包含一些我认为与 NuGet 包还原相关的内容,并在构建过程中包含某些 MS NuGet 包。
但这在不同的项目中看起来不同,而我认为没有任何差异的原因,并且新的 VS2017 项目包含另一个不同的版本。
那么,在这方面,我可以安全地做些什么来更新我的旧项目 - 它现在在 VS2017 中应该是什么样子?
两个旧解决方案都包含一个解决方案级子文件夹“.nuget”,其中包含三个文件:NuGet.Config
、NuGet.exe
和 NuGet.targets
.
旧 .csproj
文件包含这些 "versions" 的 NuGet 内容:
项目 1:
<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实际上是两个在这方面完全相同的项目。
What's the current impl. of NuGet stuff in .csproj?
要解决此问题,您可以按照以下步骤操作:
- 关闭 Visual Studio 以避免文件潜在的文件锁定和冲突。
如果使用 TFS:从解决方案的 .nuget
文件夹中删除 nuget.exe
和 nuget.targets
,并从解决方案工作区中删除这些文件。保留 nuget.config
和 disableSourceControlIntegration 设置,如 Omitting packages with Team Foundation Version Control.
中所述
如果 不 使用 TFS: 从解决方案和解决方案工作区中删除 .nuget
文件夹。
编辑解决方案中的每个项目文件,删除 <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>
注:保留<Import Project="..\packages\Microsoft.Bcl.Build...
部分详情请参考:
Nuget: Switching from "Enable Package Restore" to "Automatic Package Restore".
我有一些解决方案是从 VS2008 或 VS2010 或类似的东西开始的。它们包含一些我认为与 NuGet 包还原相关的内容,并在构建过程中包含某些 MS NuGet 包。
但这在不同的项目中看起来不同,而我认为没有任何差异的原因,并且新的 VS2017 项目包含另一个不同的版本。
那么,在这方面,我可以安全地做些什么来更新我的旧项目 - 它现在在 VS2017 中应该是什么样子?
两个旧解决方案都包含一个解决方案级子文件夹“.nuget”,其中包含三个文件:NuGet.Config
、NuGet.exe
和 NuGet.targets
.
旧 .csproj
文件包含这些 "versions" 的 NuGet 内容:
项目 1:
<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实际上是两个在这方面完全相同的项目。
What's the current impl. of NuGet stuff in .csproj?
要解决此问题,您可以按照以下步骤操作:
- 关闭 Visual Studio 以避免文件潜在的文件锁定和冲突。
如果使用 TFS:从解决方案的
.nuget
文件夹中删除nuget.exe
和nuget.targets
,并从解决方案工作区中删除这些文件。保留nuget.config
和 disableSourceControlIntegration 设置,如 Omitting packages with Team Foundation Version Control. 中所述
如果 不 使用 TFS: 从解决方案和解决方案工作区中删除
.nuget
文件夹。编辑解决方案中的每个项目文件,删除
<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>
注:保留<Import Project="..\packages\Microsoft.Bcl.Build...
部分详情请参考:
Nuget: Switching from "Enable Package Restore" to "Automatic Package Restore".