public void Should_get_framework_version_from_assembly() { var assembly = new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath; var locator = new AssemblyReader(); Assert.That(locator.GetTargetFramework(assembly), Is.EqualTo(new Version(2, 0))); }
private string GetSdkToTest(string sdkDir) { // The TFM we're testing var testTfm = AssemblyReader.GetTargetFramework(typeof(MsbuildIntegrationTestFixture).Assembly.Location); var selectedVersion = Directory.EnumerateDirectories(sdkDir) // get all directories in sdk folder .Where(path => { // SDK is for TFM to test if (string.Equals(Path.GetFileName(path), "NuGetFallbackFolder", StringComparison.OrdinalIgnoreCase)) { return(false); } var dotnetPath = Path.Combine(path, "dotnet.dll"); var sdkTfm = AssemblyReader.GetTargetFramework(dotnetPath); return(testTfm == sdkTfm); }) .Select(Path.GetFileName) // just the folder name (version string) .OrderByDescending(path => NuGetVersion.Parse(Path.GetFileName(path))) // in case there are multiple matching SDKs, selected the highest version .FirstOrDefault(); if (selectedVersion == null) { var message = $@"Could not find suitable SDK to test in {sdkDir} TFM being tested: {testTfm.DotNetFrameworkName} SDKs found: {string.Join(", ", Directory.EnumerateDirectories(sdkDir).Select(Path.GetFileName).Where(d => !string.Equals(d, "NuGetFallbackFolder", StringComparison.OrdinalIgnoreCase)))}"; throw new Exception(message); } return(selectedVersion); }
private void CopyRestoreArtifacts(string artifactsDirectory, string pathToSdkInCli, string configuration, string toolsetVersion) { const string restoreProjectName = "NuGet.Build.Tasks"; const string restoreTargetsName = "NuGet.targets"; var sdkDependencies = new List <string> { restoreProjectName, "NuGet.Versioning", "NuGet.Protocol", "NuGet.ProjectModel", "NuGet.Packaging", "NuGet.LibraryModel", "NuGet.Frameworks", "NuGet.DependencyResolver.Core", "NuGet.Configuration", "NuGet.Common", "NuGet.Commands", "NuGet.CommandLine.XPlat", "NuGet.Credentials" }; var sdkTfm = AssemblyReader.GetTargetFramework(Path.Combine(pathToSdkInCli, "dotnet.dll")); // Copy rest of the NuGet assemblies. foreach (var projectName in sdkDependencies) { var projectArtifactsBinFolder = Path.Combine(artifactsDirectory, projectName, toolsetVersion, "bin", configuration); var tfmToCopy = GetTfmToCopy(sdkTfm, projectArtifactsBinFolder); var frameworkArtifactsFolder = new DirectoryInfo(Path.Combine(projectArtifactsBinFolder, tfmToCopy)); var fileName = projectName + ".dll"; File.Copy( sourceFileName: Path.Combine(frameworkArtifactsFolder.FullName, fileName), destFileName: Path.Combine(pathToSdkInCli, fileName), overwrite: true); // Copy the restore targets. if (projectName.Equals(restoreProjectName)) { File.Copy( sourceFileName: Path.Combine(frameworkArtifactsFolder.FullName, restoreTargetsName), destFileName: Path.Combine(pathToSdkInCli, restoreTargetsName), overwrite: true); } } }
private void CopyPackSdkArtifacts(string artifactsDirectory, string pathToSdkInCli, string configuration, string toolsetVersion) { var pathToPackSdk = Path.Combine(pathToSdkInCli, "Sdks", "NuGet.Build.Tasks.Pack"); var sdkTfm = AssemblyReader.GetTargetFramework(Path.Combine(pathToSdkInCli, "dotnet.dll")); const string packProjectName = "NuGet.Build.Tasks.Pack"; const string packTargetsName = "NuGet.Build.Tasks.Pack.targets"; // Copy the pack SDK. var packProjectBinDirectory = Path.Combine(artifactsDirectory, packProjectName, toolsetVersion, "bin", configuration); var tfmToCopy = GetTfmToCopy(sdkTfm, packProjectBinDirectory); var packProjectCoreArtifactsDirectory = new DirectoryInfo(Path.Combine(packProjectBinDirectory, tfmToCopy)); // We are only copying the CoreCLR assets, since, we're testing only them under Core MSBuild. var targetRuntimeType = "CoreCLR"; var packAssemblyDestinationDirectory = Path.Combine(pathToPackSdk, targetRuntimeType); // Be smart here so we don't have to call ILMerge in the VS build. It takes ~15s total. // In VisualStudio, simply use the non il merged version. var ilMergedPackDirectoryPath = Path.Combine(packProjectCoreArtifactsDirectory.FullName, "ilmerge"); if (Directory.Exists(ilMergedPackDirectoryPath)) { var packFileName = packProjectName + ".dll"; // Only use the il merged assembly if it's newer than the build. DateTime packAssemblyCreationDate = File.GetCreationTimeUtc(Path.Combine(packProjectCoreArtifactsDirectory.FullName, packFileName)); DateTime ilMergedPackAssemblyCreationDate = File.GetCreationTimeUtc(Path.Combine(ilMergedPackDirectoryPath, packFileName)); if (ilMergedPackAssemblyCreationDate > packAssemblyCreationDate) { FileUtility.Replace( sourceFileName: Path.Combine(packProjectCoreArtifactsDirectory.FullName, "ilmerge", packFileName), destFileName: Path.Combine(packAssemblyDestinationDirectory, packFileName)); } } else { foreach (var assembly in packProjectCoreArtifactsDirectory.EnumerateFiles("*.dll")) { File.Copy( sourceFileName: assembly.FullName, destFileName: Path.Combine(packAssemblyDestinationDirectory, assembly.Name), overwrite: true); } } // Copy the pack targets var packTargetsSource = Path.Combine(packProjectCoreArtifactsDirectory.FullName, packTargetsName); var targetsDestination = Path.Combine(pathToPackSdk, "build", packTargetsName); var targetsDestinationCrossTargeting = Path.Combine(pathToPackSdk, "buildCrossTargeting", packTargetsName); File.Copy(packTargetsSource, targetsDestination, overwrite: true); File.Copy(packTargetsSource, targetsDestinationCrossTargeting, overwrite: true); }
public string Get(string testAssembly) { var locator = new AssemblyReader(); return Get(locator.GetPlatform(testAssembly), locator.GetTargetFramework(testAssembly)); }
public string Get(string testAssembly) { var locator = new AssemblyReader(); return(Get(locator.GetPlatform(testAssembly), locator.GetTargetFramework(testAssembly))); }