我一直在寻找几天如何让NuGet使用VS2015和GitLab自动恢复软件包,而且我没有运气。
方案: 我从GitLab克隆了一个空存储库,并使用VS添加默认的.gitignore和.getattribute文件。我使用.NET framework 4.5.2创建了一个HelloWorld控制台应用程序。我想要自动递增构建号,所以我安装了MSBuild扩展包(类型"安装包MSBuild.Extension.Pack"在VS的NuGet控制台中)。这会修改CSPROJ文件。然后,我进一步修改了项目文件,以便在每次构建时更新构建和修订号。项目文件的净修改部分如下所示:
data = pd.read_table('C:\\Aerosonde Test Logs\\MH_Data\\TEC_20170105-083220\\222_1_4435_.log',
delim_whitespace=True)
所以我构建它,它按预期运行,我全部检查。在另一台机器上,我克隆存储库并打开解决方案。该项目不会加载,VS没有尝试恢复任何东西;这是错误:
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\packages\MSBuild.Extension.Pack.1.8.0\build\net40\MSBuild.Extension.Pack.targets" Condition="Exists('..\packages\MSBuild.Extension.Pack.1.8.0\build\net40\MSBuild.Extension.Pack.targets')" />
<Import Project="$(MSBuildProjectDirectory)\..\packages\MSBuild.Extension.Pack.1.8.0\tools\net40\MSBuild.ExtensionPack.VersionNumber.targets" />
<Target Name="BeforeBuild" Condition="'$(Configuration)' == 'Release'">
<AssemblyInfo AssemblyInfoFiles="@(AssemblyInfoFiles)" />
</Target>
<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\MSBuild.Extension.Pack.1.8.0\build\net40\MSBuild.Extension.Pack.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSBuild.Extension.Pack.1.8.0\build\net40\MSBuild.Extension.Pack.targets'))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
我看到很多其他人在NuGet恢复方面遇到问题,还有很多解决方案,但这些解决方案似乎都不属于首次使用VS2015开始的项目。 (有许多解决方案可以改变项目或解决方案的.nuget子目录...... VS2015不会创建这样的目录。)
除此之外,NuGet还原需要在MSBuild中运行,因为我们的构建机器不能运行Visual Studio。
答案 0 :(得分:2)
处理无法解决问题的问题:
使用此代码
<Import Project="..\packages\MSBuild.Extension.Pack.1.8.0\tools\net40\MSBuild.ExtensionPack.VersionNumber.targets" Condition="Exists('..\packages\MSBuild.Extension.Pack.1.8.0\tools\net40\MSBuild.ExtensionPack.VersionNumber.targets')" />
之后,在Visual Studio中构建时将恢复包。 (Enabling and disabling package restore in VS)
关于恢复问题:
使用MSBuild-integrated restore,解决方案中有.nuget文件夹。由于您不希望将.nuget文件夹包含到解决方案文件夹中并在构建计算机上构建(例如CI),因此您需要在构建之前恢复该程序包。
例如,如果通过TFS / VSTS vNext构建进行构建,则可以添加NuGet还原构建步骤。对于gitlab CI build,您可以在.gitlab-ci.yml文件的 before_script 部分恢复包。