3

Nuget ドキュメントに従って、MSBuild .targets および .props ファイルを含む nuget パッケージを作成しています(nuget 2.5 以降が必要です)。

自動パッケージ復元で使用する予定です。

結果のパッケージを csproj に追加すると、次の 2 つのことが起こります。

予想通り:

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

これは、MSBuild 統合パッケージ復元スキャフォールディングの「予期しない」動作です。

ドキュメントに従ってこのスキャフォールディングを手動で削除しましたが、プロジェクトをビルド サーバーに送信すると、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.targets ファイルに対処するために、別の nuget パッケージを作成しました。プロジェクトに追加すると、この新しいパッケージ自体に 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>
4

1 に答える 1

0

ソリューションが存在するフォルダーには.nugetフォルダーがありますか? もしそうなら、それを削除してみてください。

パッケージ復元の古い (nuget 2.7 より前の) 方法を使用していたソリューションを微調整しており、そのフォルダーを削除するまで同じ問題が発生していました。

于 2015-07-22T21:26:59.247 に答える