Skip to content

Modernize build: add package READMEs and migrate nupkgproj to NoTargets SDK#1564

Open
alinpahontu2912 wants to merge 1 commit intodotnet:mainfrom
alinpahontu2912:infra/modernize-build-1346
Open

Modernize build: add package READMEs and migrate nupkgproj to NoTargets SDK#1564
alinpahontu2912 wants to merge 1 commit intodotnet:mainfrom
alinpahontu2912:infra/modernize-build-1346

Conversation

@alinpahontu2912
Copy link
Copy Markdown
Member

Summary

First step toward modernizing TorchSharp's build infrastructure per #1346. This PR adds NuGet package READMEs and migrates all .nupkgproj packaging projects from the full C# SDK to Microsoft.Build.NoTargets.

Problem/Motivation

Per #1346, the .nupkgproj files use Sdk="Microsoft.NET.Sdk" despite never compiling C# code — they exist solely to package content. This pulls in unnecessary C# compile targets (Compile, CoreCompile, ResolveAssemblyReferences) that slow builds and can produce confusing warnings. Additionally, no packages include README files, which is standard practice for NuGet packages.

Solution

Package READMEs

  • Created README.md for 7 main packages: TorchSharp, TorchAudio, TorchVision, TorchSharp-cpu, TorchSharp-cuda-linux, TorchSharp-cuda-windows, libtorch-cpu
  • Added PackageReadmeFile property and Content inclusion in pkg/Directory.Build.props
  • Excluded symbols packages from README inclusion via IsSymbolsPackage condition

NoTargets SDK Migration

  • Migrated all 53 .nupkgproj files from Sdk="Microsoft.NET.Sdk" to Sdk="Microsoft.Build.NoTargets/3.7.134"
  • The TorchSharp.symbols.nupkgproj (which has no SDK and just imports TorchSharp.nupkgproj) was left unchanged
  • Fixed the custom GetTargetPath target in pkg/Directory.Build.targets to compute fake target paths directly from PackagePreparationPath instead of relying on TargetPathWithTargetPlatformMoniker (which is not populated under NoTargets)

Changes

New files

  • \pkg/TorchSharp/README.md\ — Main TorchSharp package readme with installation and usage examples
  • \pkg/TorchAudio/README.md\ — TorchAudio package readme
  • \pkg/TorchVision/README.md\ — TorchVision package readme
  • \pkg/TorchSharp-cpu/README.md\ — CPU convenience package readme
  • \pkg/TorchSharp-cuda-linux/README.md\ — CUDA Linux convenience package readme
  • \pkg/TorchSharp-cuda-windows/README.md\ — CUDA Windows convenience package readme
  • \pkg/libtorch-cpu/README.md\ — LibTorch CPU meta-package readme

Modified files

  • \pkg/Directory.Build.props\ — Added PackageReadmeFile property and Content inclusion
  • \pkg/Directory.Build.targets\ — Fixed GetTargetPath for NoTargets SDK compatibility
  • 53 .nupkgproj\ files — SDK changed from Microsoft.NET.Sdk to Microsoft.Build.NoTargets/3.7.134

Testing

  • \dotnet restore pkg/pack.proj\ succeeds with all package projects
  • \dotnet build src/TorchSharp/TorchSharp.csproj\ builds with 0 warnings
  • Single-project restore (\pkg/TorchSharp/TorchSharp.nupkgproj) succeeds

Checklist

  • Restore succeeds for all package projects
  • Main project build succeeds with 0 warnings
  • No breaking changes to pack pipeline
  • Symbols package excluded from README logic

…ts SDK

- Add README.md for 7 main packages (TorchSharp, TorchAudio, TorchVision,
  TorchSharp-cpu, TorchSharp-cuda-linux, TorchSharp-cuda-windows, libtorch-cpu)
  following dotnet/runtime convention with PackageReadmeFile support
- Migrate all 53 .nupkgproj files from Microsoft.NET.Sdk to
  Microsoft.Build.NoTargets/3.7.134 to avoid pulling in unnecessary C#
  compile targets for projects that only package content
- Fix GetTargetPath in pkg/Directory.Build.targets to compute fake target
  paths directly instead of relying on TargetPathWithTargetPlatformMoniker
  which is not available under NoTargets SDK
- Add PackageReadmeFile property and Content inclusion in
  pkg/Directory.Build.props, with exclusion for symbols packages

Part of dotnet#1346

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR modernizes TorchSharp’s NuGet packaging infrastructure by (1) adding package READMEs for key packages and wiring them into packing, and (2) migrating packaging-only .nupkgproj projects from Microsoft.NET.Sdk to Microsoft.Build.NoTargets to avoid unnecessary compile targets during packaging.

Changes:

  • Added README.md files for major packages and configured PackageReadmeFile + packing inclusion in pkg/Directory.Build.props.
  • Migrated packaging projects (.nupkgproj) to Sdk="Microsoft.Build.NoTargets/3.7.134".
  • Updated pkg/Directory.Build.targets GetTargetPath logic for NoTargets compatibility.

Reviewed changes

Copilot reviewed 62 out of 62 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
pkg/Directory.Build.props Sets PackageReadmeFile and packs README when present; continues central packaging properties/content rules.
pkg/Directory.Build.targets Updates GetTargetPath to compute a “fake” target path under PackagePreparationPath for ProjectReference consumers.
pkg/TorchSharp/README.md Adds NuGet package README for TorchSharp.
pkg/TorchSharp/TorchSharp.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/TorchAudio/README.md Adds NuGet package README for TorchAudio.
pkg/TorchAudio/TorchAudio.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/TorchVision/README.md Adds NuGet package README for TorchVision.
pkg/TorchVision/TorchVision.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/TorchSharp-cpu/README.md Adds NuGet package README for TorchSharp-cpu convenience package.
pkg/TorchSharp-cpu/TorchSharp-cpu.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/TorchSharp-cuda-linux/README.md Adds NuGet package README for TorchSharp-cuda-linux convenience package.
pkg/TorchSharp-cuda-linux/TorchSharp-cuda-linux.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/TorchSharp-cuda-windows/README.md Adds NuGet package README for TorchSharp-cuda-windows convenience package.
pkg/TorchSharp-cuda-windows/TorchSharp-cuda-windows.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cpu/README.md Adds NuGet package README for libtorch-cpu meta package.
pkg/libtorch-cpu/libtorch-cpu.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cpu-linux-x64/libtorch-cpu-linux-x64.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cpu-osx-arm64/libtorch-cpu-osx-arm64.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cpu-win-arm64/libtorch-cpu-win-arm64.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cpu-win-x64/libtorch-cpu-win-x64.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64/libtorch-cuda-12.8-linux-x64.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part1/libtorch-cuda-12.8-linux-x64-part1.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part2-fragment1/libtorch-cuda-12.8-linux-x64-part2-fragment1.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part2-primary/libtorch-cuda-12.8-linux-x64-part2-primary.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part3-fragment1/libtorch-cuda-12.8-linux-x64-part3-fragment1.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part3-fragment2/libtorch-cuda-12.8-linux-x64-part3-fragment2.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part3-fragment3/libtorch-cuda-12.8-linux-x64-part3-fragment3.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part3-fragment4/libtorch-cuda-12.8-linux-x64-part3-fragment4.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part3-fragment5/libtorch-cuda-12.8-linux-x64-part3-fragment5.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part3-fragment6/libtorch-cuda-12.8-linux-x64-part3-fragment6.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part3-primary/libtorch-cuda-12.8-linux-x64-part3-primary.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part4-fragment1/libtorch-cuda-12.8-linux-x64-part4-fragment1.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part4-primary/libtorch-cuda-12.8-linux-x64-part4-primary.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part5-fragment1/libtorch-cuda-12.8-linux-x64-part5-fragment1.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part5-fragment2/libtorch-cuda-12.8-linux-x64-part5-fragment2.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part5-primary/libtorch-cuda-12.8-linux-x64-part5-primary.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part6/libtorch-cuda-12.8-linux-x64-part6.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part7-fragment1/libtorch-cuda-12.8-linux-x64-part7-fragment1.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part7-fragment2/libtorch-cuda-12.8-linux-x64-part7-fragment2.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part7-fragment3/libtorch-cuda-12.8-linux-x64-part7-fragment3.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part7-primary/libtorch-cuda-12.8-linux-x64-part7-primary.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part8-fragment1/libtorch-cuda-12.8-linux-x64-part8-fragment1.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part8-primary/libtorch-cuda-12.8-linux-x64-part8-primary.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part9-fragment1/libtorch-cuda-12.8-linux-x64-part9-fragment1.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-linux-x64-part9-primary/libtorch-cuda-12.8-linux-x64-part9-primary.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-win-x64/libtorch-cuda-12.8-win-x64.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-win-x64-part1/libtorch-cuda-12.8-win-x64-part1.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-win-x64-part10/libtorch-cuda-12.8-win-x64-part10.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-win-x64-part2/libtorch-cuda-12.8-win-x64-part2.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-win-x64-part3-fragment1/libtorch-cuda-12.8-win-x64-part3-fragment1.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-win-x64-part3-primary/libtorch-cuda-12.8-win-x64-part3-primary.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-win-x64-part4/libtorch-cuda-12.8-win-x64-part4.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-win-x64-part5-fragment1/libtorch-cuda-12.8-win-x64-part5-fragment1.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-win-x64-part5-fragment2/libtorch-cuda-12.8-win-x64-part5-fragment2.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-win-x64-part5-primary/libtorch-cuda-12.8-win-x64-part5-primary.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-win-x64-part6/libtorch-cuda-12.8-win-x64-part6.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-win-x64-part7-fragment1/libtorch-cuda-12.8-win-x64-part7-fragment1.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-win-x64-part7-primary/libtorch-cuda-12.8-win-x64-part7-primary.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-win-x64-part8/libtorch-cuda-12.8-win-x64-part8.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-win-x64-part9-fragment1/libtorch-cuda-12.8-win-x64-part9-fragment1.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-win-x64-part9-fragment2/libtorch-cuda-12.8-win-x64-part9-fragment2.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.
pkg/libtorch-cuda-12.8-win-x64-part9-primary/libtorch-cuda-12.8-win-x64-part9-primary.nupkgproj Switches packaging project SDK to Microsoft.Build.NoTargets.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +10 to 15
<!-- Compute a fake target path from PackagePreparationPath so that ProjectReference consumers
can resolve a dependency. This replaces the TargetPathWithTargetPlatformMoniker-based approach
which is not available under Microsoft.Build.NoTargets. -->
<ItemGroup>
<_targetPathUnderPackagePrep Include="@(TargetPathWithTargetPlatformMoniker->'$(PackagePreparationPath)$(PackageIdFolderName)\lib\$(TargetFramework)\%(FileName)%(Extension)')" />
<_targetPathUnderPackagePrep Include="$(PackagePreparationPath)$(PackageIdFolderName)\lib\$(TargetFramework)\$(PackageIdFolderName).dll" />
<_updatedTargetPath Include="@(_targetPathUnderPackagePrep)" Condition="Exists('%(Identity)')" />
Comment thread pkg/Directory.Build.props
Comment on lines 52 to 55
<IsSymbolsPackage Condition="$(MSBuildProjectName.Contains('.symbols'))">true</IsSymbolsPackage>
<PackageIdFolderName>$(MSBuildProjectName.Replace('.symbols', ''))</PackageIdFolderName>
<PackageReadmeFile Condition="'$(IsSymbolsPackage)' != 'true' AND Exists('$(MSBuildProjectDirectory)\README.md')">README.md</PackageReadmeFile>

Comment thread pkg/Directory.Build.props
Comment on lines +80 to +82
<ItemGroup Condition="'$(PackageReadmeFile)' != ''">
<Content Include="$(MSBuildProjectDirectory)\README.md" Pack="true" PackagePath="" />
</ItemGroup>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants