private void GeneratePackageReferences()

in Sharpmake.Generators/VisualStudio/Csproj.cs [2622:2686]


        private void GeneratePackageReferences(
            CSharpProject project,
            List<Project.Configuration> configurations,
            ItemGroups itemGroups,
            List<string> generatedFiles,
            List<string> skipFiles
        )
        {
            foreach (var configuration in configurations)
            {
                var devenv = configuration.Target.GetFragment<DevEnv>();
                var targetFramework = GetTargetFramework(configuration);
                // package reference: Default in vs2017+
                if (project.NuGetReferenceType == Project.NuGetPackageMode.PackageReference
                    || (project.NuGetReferenceType == Project.NuGetPackageMode.VersionDefault && devenv >= DevEnv.vs2017))
                {
                    if (devenv < DevEnv.vs2017)
                        throw new Error("Package references are not supported on Visual Studio versions below vs2017");

                    var resolver = new Resolver();
                    foreach (var packageReference in configuration.ReferencesByNuGetPackage)
                    {
                        itemGroups.AddPackageReference(targetFramework, new ItemGroups.ItemTemplate(packageReference.Resolve(resolver)));
                    }
                }
                // project.json: Default in vs2015
                else if (project.NuGetReferenceType == Project.NuGetPackageMode.ProjectJson
                        || (project.NuGetReferenceType == Project.NuGetPackageMode.VersionDefault && devenv == DevEnv.vs2015))
                {
                    if (devenv < DevEnv.vs2015)
                        throw new Error("Project.json files are not supported on Visual Studio versions below vs2015");

                    var projectJson = new ProjectJson();
                    projectJson.Generate(_builder, project, configurations, _projectPath, generatedFiles, skipFiles);
                    if (projectJson.IsGenerated)
                    {
                        string include = Util.PathGetRelative(_projectPathCapitalized, Util.SimplifyPath(projectJson.ProjectJsonPath));
                        itemGroups.Nones.Add(new ItemGroups.None { Include = include });
                    }
                }
                // packages.config: only if manually chosen
                else if (project.NuGetReferenceType == Project.NuGetPackageMode.PackageConfig)
                {
                    var packagesConfig = new PackagesConfig();
                    packagesConfig.Generate(_builder, project, configurations, _projectPath, generatedFiles, skipFiles);
                    if (packagesConfig.IsGenerated)
                    {
                        string include = Util.PathGetRelative(_projectPathCapitalized, Util.SimplifyPath(packagesConfig.PackagesConfigPath));
                        itemGroups.Nones.Add(new ItemGroups.None { Include = include });
                    }
                    foreach (var references in configuration.ReferencesByNuGetPackage)
                    {
                        string dotNetHint = references.DotNetHint;
                        if (string.IsNullOrWhiteSpace(dotNetHint))
                        {
                            var frameworkFlags = project.Targets.TargetPossibilities.Select(f => f.GetFragment<DotNetFramework>()).Aggregate((x, y) => x | y);
                            DotNetFramework dnfs = ((DotNetFramework[])Enum.GetValues(typeof(DotNetFramework))).First(f => frameworkFlags.HasFlag(f));
                            dotNetHint = dnfs.ToFolderName();
                        }
                        string hintPath = Path.Combine("$(SolutionDir)packages", references.Name + "." + references.Version, "lib", dotNetHint, references.Name + ".dll");
                        itemGroups.AddReference(targetFramework, new ItemGroups.Reference { Include = references.Name, HintPath = hintPath });
                    }
                }
            }
        }