I ran into a few packages which were designed to work only with net40 but the package author didn't constrain their build assets with the same TFM (eg: lib\net40\foo.dll, build\foo.targets). I've also seen similar packages where folks forgot to constrain their dependencies (eg: lib\net40\foo.dll, root dependencies with no TFM).
The result was that package would only install the unconstrained assets and wouldn't trigger AssetTargetFallback. I know this is covered in the last row of https://github.com/NuGet/Home/wiki/Enable-.NET-Core-2.0-projects-to-work-with-.NET-Framework-4.6.1-compatible-packages but I want to raise this as a potential issue.
In the case I hit this issue I was able to use PackageTargetFallback instead but that's not a real solution since it's a global hammer and also something that @rrelyea mentioned NuGet wants to deprecate.
I had some other ideas and thought to propose them here as an alternative:
- Make AssetTargetFallback always ignore TFM-less matches.
- Allow a project-wide property that says AssetTargetFallback should ignore TFM-less matches.
- Allow for per-package-reference metadata that says AssetTargetFallback should ignore TFM-less matches.
- Allow for per-package-reference metadata to tell NuGet specifically which TFM to evaluate for assets within a package. For example
UseAssets="net46" or UseAssets="Dependencies=net46;Compile=net46" etc.
I ran into a few packages which were designed to work only with
net40but the package author didn't constrain their build assets with the same TFM (eg: lib\net40\foo.dll, build\foo.targets). I've also seen similar packages where folks forgot to constrain their dependencies (eg: lib\net40\foo.dll, root dependencies with no TFM).The result was that package would only install the unconstrained assets and wouldn't trigger AssetTargetFallback. I know this is covered in the last row of https://github.com/NuGet/Home/wiki/Enable-.NET-Core-2.0-projects-to-work-with-.NET-Framework-4.6.1-compatible-packages but I want to raise this as a potential issue.
In the case I hit this issue I was able to use PackageTargetFallback instead but that's not a real solution since it's a global hammer and also something that @rrelyea mentioned NuGet wants to deprecate.
I had some other ideas and thought to propose them here as an alternative:
UseAssets="net46"orUseAssets="Dependencies=net46;Compile=net46"etc.