-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Description
If you use a mono repo or a small list of separately built components, most CPM benefits are more or less lost on you - a few just allow some easy syncing, but you're likely just making sure to manually control the Directory.Packages.props file on a parent folder where all builds occur.
In a complicated web of interdependent components, however, CPM is much better. Previously, dependency versions of packages between these dependencies (for both third party stuff and also other dependent components) have to be manually tracked and this can quickly become cumbersome. Enter CPM - a magical way to try to instead manage Directory.Package.props file(s) and use them when you need them. Want to chain updates through everything for a product release? Just update this shared file and rebuild through the ripple!
The problem here is that I'm relying on windows files paths and copying a file in at pre-restore time / pipeline build time. This doesn't seem to flow with how the capability is supposed to be so seamless. I either have to have some kind of build/restore event that relies on the repository being pulled (shared repository where the Directory.Packages.props files live), and executes before both a local and pipeline build. I think the Microsoft.Build.CentralPackageVersion functionality of CentralPackagesFile - an msbuild property that allowed an override to default checking of the file in the folder - would be a useful alternative to having to invoke file I/O. I much rather would have a file read from its current location than manually copy it into every solution/project that needs it.
Thoughts?
Example of what I have to do now (local build only):
<!-- Creates a link from DestinationFolder to FullPath or copies if the link cannot be made. -->
<Target Name="CopyCPMFile" BeforeTargets="Restore;CollectPackageReferences" Condition="'$(CI_BUILD)' != 'True'">
<Copy UseHardLinksIfPossible="true"
SourceFiles="%(CopyCPMFile.FullPath)"
DestinationFolder="%(CopyCPMFile.DestinationFolder)"
ContinueOnError="false"
SkipUnchangedFiles="true"/>
</Target>
<ItemGroup>
<CopyCPMFile Include="$(SolutionDir)..\CPMFiles\Latest\Directory.Packages.props">
<DestinationFolder>$(ProjectDir)</DestinationFolder>
</CopyCPMFile>
</ItemGroup>
I wrote a similar item up under NuGet but I see this topic is a lot more active and also relevant.
NuGet/Home#14438