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 });
}
}
}
}