我正在根据nuget documentation创建一个包含MSBuild .targets和.props文件的nuget包(需要nuget 2.5 +)。
我打算将它与自动包恢复一起使用。
当我将生成的包添加到csproj时,会发生两件事:
如预期的那样:
<Import Project="..\packages\MyPackage.1.0.0\build\net40\MyPackage.props" Condition="Exists('..\packages\MyPackage.1.0.0\build\net40\MyPackage.props')" />
...
...
<Import Project="..\packages\MyPackage.1.0.0\build\net40\MyPackage.targets" Condition="Exists('..\packages\MyPackage.1.0.0\build\net40\MyPackage.targets')" />
不期望:
<PropertyGroup>
<RestorePackages>true</RestorePackages>
...
</PropertyGroup>
...
<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>
那就是'Not expected'行为是MSBuild集成的包恢复脚手架。
我按照documentation手动删除了这个脚手架,但是当我将项目提交给构建服务器时,automaitc-package-restore似乎将脚手架添加回来,导致构建失败。
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 D:\TFSBuilds\...\.nuget\NuGet.targets.
当软件包包含msbuild目标时,是否有人阻止/阻止此脚手架被包含?
更新
代替解决方案我尝试了一种解决方法。也就是说,我创建了另一个nuget包来解决缺少的nuget.targets文件。当添加到项目中时,这个新包本身包含一个DependsOnTargets EnsureNuGetPackageBuildImports的目标,并创建一个空白/有效的nuget.targets。这满足了从csproj脚手架触发的条件,同时允许在构建服务器上触发nuget自动包恢复功能。
<Target Name="NuGetPackAutomaticPackageRestorePreBuildWorkaround" BeforeTargets="EnsureNuGetPackageBuildImports" Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')">
<ItemGroup>
<PatchTargets Include="$(MSBuildThisFileDirectory)TargetPatches\*.targets"/>
</ItemGroup>
<Copy
SourceFiles="@(PatchTargets)"
DestinationFolder="$(SolutionDir)\.nuget\"/>
</Target>
答案 0 :(得分:0)
解决方案所在的文件夹是否包含.nuget
文件夹?如果是这样,请尝试删除它。
我正在调整一个使用旧的(pre nuget 2.7)包恢复方式的解决方案,并且在删除该文件夹之前遇到了同样的问题。