Bin*_*ier 5 msbuild nuget-package-restore visual-studio-2017
我已经"下载了丢失的软件包"

项目文件最初是在VS 2013中创建的
build.proj使用MSBuild任务来构建解决方案.
<MSBuild Projects ="$(root)\src\MySolution.sln" ContinueOnError ="false" Properties="Configuration=$(Configuration)">
<Output ItemName="OutputFiles" TaskParameter="TargetOutputs"/>
</MSBuild>
Run Code Online (Sandbox Code Playgroud)
我的google-fu失败了我,任何和所有想法都会得到很好的收到.
packages.config基于项目需要通过NuGet来恢复,而不是MSBuild.Visual Studio通过VS请求构建时执行此操作.如果需要从命令行执行此操作,则需要使用命令行nuget.exe实用程序来还原软件包.
只有PackageReference引用NuGet包的方式才会集成到MSBuild中.您可以通过从项目中卸载所有NuGet包,并更改默认包管理格式或选择"允许在第一个包安装时选择格式"复选框来切换到此格式.然后您可以重新添加包(只需要顶级包)并确保它不生成packages.config文件.
这里有一些问题:
还原后,MSBuild必须重新评估项目文件.在<MSBuild>CI脚本中使用任务时,只有在将一组不同的属性传递给任务时才会发生这种情况.这是因为还原obj\会在评估期间检查的目录中生成自动导入的文件.
如果还原没有生成,但是更改这些文件,这还不够,并且必须使用干净的xml缓存重新评估项目.这项<MSBuild>任务无法实现.MSBuild 15.5引入了一个/restore执行Restore目标的选项,然后清理这些缓存(之前没有API)并按要求执行其余的构建.在15.5之前,msbuild.exe需要进行两次单独的调用以确保增量恢复+构建产生正确的输出.
如果要使用CI构建项目PackageReference,最安全的方法是创建build.proj具有还原和构建目标的项目:
<Project>
<Target Name="Restore">
<MSBuild Projects="$(root)\src\MySolution.sln" Targets="Restore" />
</Target>
<Target Name="Build">
<MSBuild Projects="$(root)\src\MySolution.sln" Targets="Build" />
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
并使用执行它
msbuild /restore /t:Build build.proj
Run Code Online (Sandbox Code Playgroud)
我发现调用nuget restore MySolution.sln将恢复解决方案的包。
我放入nuget.exe我的构建文件夹,并为我的源树中的每个解决方案运行恢复。
我的 MsBuild 目标是为所有解决方案中的所有项目恢复包。
<Target Name="NuGetRestore">
<ItemGroup>
<slns Include="$(MSBuildProjectDirectory)\..\**\*.sln"/>
</ItemGroup>
<Exec Command="$(MSBuildProjectDirectory)\nuget restore %(slns.Identity)"/>
</Target>
Run Code Online (Sandbox Code Playgroud)
Nuget.exe 不必在每个项目文件夹中,只需在 build.gradle 文件夹中即可。
| 归档时间: |
|
| 查看次数: |
3908 次 |
| 最近记录: |