private void AddEntry(XDocument document, string id, SemanticVersion version, FrameworkName targetFramework) { XElement element = FindEntry(document, id, version); if (element != null) { element.Remove(); } var newElement = new XElement("package", new XAttribute("id", id), new XAttribute("version", version)); if (targetFramework != null) { newElement.Add(new XAttribute("targetFramework", VersionUtility.GetShortFrameworkName(targetFramework))); } // Restore the version constraint string versionConstraint; if (_constraints.TryGetValue(id, out versionConstraint)) { newElement.Add(new XAttribute("allowedVersions", versionConstraint)); } document.Root.Add(newElement); SaveDocument(document); }
private void AddEntry(XDocument document, string id, SemanticVersion version, bool developmentDependency, FrameworkName targetFramework, bool requireReinstallation) { XElement element = FindEntry(document, id, version); if (element != null) { element.Remove(); } var newElement = new XElement("package", new XAttribute("id", id), new XAttribute("version", version)); if (targetFramework != null) { newElement.Add(new XAttribute("targetFramework", VersionUtility.GetShortFrameworkName(targetFramework))); } // Restore the version constraint string versionConstraint; if (_constraints.TryGetValue(id, out versionConstraint)) { newElement.Add(new XAttribute("allowedVersions", versionConstraint)); } // Restore the development dependency flag string developmentFlag; if (_developmentFlags.TryGetValue(id, out developmentFlag)) { newElement.Add(new XAttribute("developmentDependency", developmentFlag)); } else if (developmentDependency) { newElement.Add(new XAttribute("developmentDependency", "true")); } if (requireReinstallation) { newElement.Add(new XAttribute("requireReinstallation", Boolean.TrueString)); } document.Root.Add(newElement); SaveDocument(document); }
private void AddEntry(XDocument document, string id, SemanticVersion version, bool developmentDependency, FrameworkName targetFramework, bool requireReinstallation) { string str; string str2; XElement element = FindEntry(document, id, version); if (element != null) { element.Remove(); } object[] content = new object[] { new XAttribute("id", id), new XAttribute("version", version) }; XElement element2 = new XElement("package", content); if (targetFramework != null) { element2.Add(new XAttribute("targetFramework", VersionUtility.GetShortFrameworkName(targetFramework))); } if (this._constraints.TryGetValue(id, out str)) { element2.Add(new XAttribute("allowedVersions", str)); } if (this._developmentFlags.TryGetValue(id, out str2)) { element2.Add(new XAttribute("developmentDependency", str2)); } else if (developmentDependency) { element2.Add(new XAttribute("developmentDependency", "true")); } if (requireReinstallation) { element2.Add(new XAttribute("requireReinstallation", bool.TrueString)); } document.Root.Add(element2); this.SaveDocument(document); }
private void LogTargetFrameworkInfo(IPackage package, List <IPackageAssemblyReference> assemblyReferences, List <IPackageFile> contentFiles, List <IPackageFile> buildFiles) { if (assemblyReferences.Count > 0 || contentFiles.Count > 0 || buildFiles.Count > 0) { // targetFramework can be null for unknown project types string shortFramework = Project.TargetFramework == null ? string.Empty : VersionUtility.GetShortFrameworkName(Project.TargetFramework); Logger.Log(MessageLevel.Debug, NuGetResources.Debug_TargetFrameworkInfoPrefix, package.GetFullName(), Project.ProjectName, shortFramework); if (assemblyReferences.Count > 0) { Logger.Log(MessageLevel.Debug, NuGetResources.Debug_TargetFrameworkInfo, NuGetResources.Debug_TargetFrameworkInfo_AssemblyReferences, Path.GetDirectoryName(assemblyReferences[0].Path), VersionUtility.GetTargetFrameworkLogString(assemblyReferences[0].TargetFramework)); } if (contentFiles.Count > 0) { Logger.Log(MessageLevel.Debug, NuGetResources.Debug_TargetFrameworkInfo, NuGetResources.Debug_TargetFrameworkInfo_ContentFiles, Path.GetDirectoryName(contentFiles[0].Path), VersionUtility.GetTargetFrameworkLogString(contentFiles[0].TargetFramework)); } if (buildFiles.Count > 0) { Logger.Log(MessageLevel.Debug, NuGetResources.Debug_TargetFrameworkInfo, NuGetResources.Debug_TargetFrameworkInfo_BuildFiles, Path.GetDirectoryName(buildFiles[0].Path), VersionUtility.GetTargetFrameworkLogString(buildFiles[0].TargetFramework)); } } }
protected virtual void ExtractPackageFilesToProject(IPackage package) { // BUG 491: Installing a package with incompatible binaries still does a partial install. // Resolve assembly references and content files first so that if this fails we never do anything to the project List <IPackageAssemblyReference> assemblyReferences = Project.GetCompatibleItemsCore(package.AssemblyReferences).ToList(); List <FrameworkAssemblyReference> frameworkReferences = Project.GetCompatibleItemsCore(package.FrameworkAssemblies).ToList(); List <IPackageFile> contentFiles = Project.GetCompatibleItemsCore(package.GetContentFiles()).ToList(); List <IPackageFile> buildFiles = Project.GetCompatibleItemsCore(package.GetBuildFiles()).ToList(); // If the package doesn't have any compatible assembly references or content files, // throw, unless it's a meta package. if (assemblyReferences.Count == 0 && frameworkReferences.Count == 0 && contentFiles.Count == 0 && buildFiles.Count == 0 && (package.FrameworkAssemblies.Any() || package.AssemblyReferences.Any() || package.GetContentFiles().Any() || package.GetBuildFiles().Any())) { // for portable framework, we want to show the friendly short form (e.g. portable-win8+net45+wp8) instead of ".NETPortable, Profile=Profile104". FrameworkName targetFramework = Project.TargetFramework; string targetFrameworkString = targetFramework.IsPortableFramework() ? VersionUtility.GetShortFrameworkName(targetFramework) : targetFramework != null?targetFramework.ToString() : null; throw new InvalidOperationException( String.Format(CultureInfo.CurrentCulture, NuGetResources.UnableToFindCompatibleItems, package.GetFullName(), targetFrameworkString)); } // IMPORTANT: this filtering has to be done AFTER the 'if' statement above, // so that we don't throw the exception in case the <References> filters out all assemblies. FilterAssemblyReferences(assemblyReferences, package.PackageAssemblyReferences); try { // Log target framework info for debugging LogTargetFrameworkInfo(package, assemblyReferences, contentFiles, buildFiles); // Add content files Project.AddFiles(contentFiles, _fileTransformers); // Add the references to the reference path foreach (IPackageAssemblyReference assemblyReference in assemblyReferences) { if (assemblyReference.IsEmptyFolder()) { continue; } // Get the physical path of the assembly reference string referencePath = Path.Combine(PathResolver.GetInstallPath(package), assemblyReference.Path); string relativeReferencePath = PathUtility.GetRelativePath(Project.Root, referencePath); if (Project.ReferenceExists(assemblyReference.Name)) { Project.RemoveReference(assemblyReference.Name); } Project.AddReference(relativeReferencePath); } // Add GAC/Framework references foreach (FrameworkAssemblyReference frameworkReference in frameworkReferences) { if (!Project.ReferenceExists(frameworkReference.AssemblyName)) { Project.AddFrameworkReference(frameworkReference.AssemblyName); } } foreach (var importFile in buildFiles) { string fullImportFilePath = Path.Combine(PathResolver.GetInstallPath(package), importFile.Path); Project.AddImport( fullImportFilePath, importFile.Path.EndsWith(".props", StringComparison.OrdinalIgnoreCase) ? ProjectImportLocation.Top : ProjectImportLocation.Bottom); } } finally { if (_packageReferenceRepository != null) { // save the used project's framework if the repository supports it. _packageReferenceRepository.AddPackage(package.Id, package.Version, package.DevelopmentDependency, Project.TargetFramework); } else { // Add package to local repository in the finally so that the user can uninstall it // if any exception occurs. This is easier than rolling back since the user can just // manually uninstall things that may have failed. // If this fails then the user is out of luck. LocalRepository.AddPackage(package); } } }
protected virtual void ExtractPackageFilesToProject(IPackage package) { // BUG 491: Installing a package with incompatible binaries still does a partial install. // Resolve assembly references and content files first so that if this fails we never do anything to the project IList <IPackageAssemblyReference> assemblyReferences = Project.GetCompatibleItemsCore(package.AssemblyReferences).ToList(); IList <FrameworkAssemblyReference> frameworkReferences = Project.GetCompatibleItemsCore(package.FrameworkAssemblies).ToList(); IList <IPackageFile> contentFiles = Project.GetCompatibleItemsCore(package.GetContentFiles()).ToList(); // If the package doesn't have any compatible assembly references or content files, // throw, unless it's a meta package. if (assemblyReferences.Count == 0 && frameworkReferences.Count == 0 && contentFiles.Count == 0 && (package.FrameworkAssemblies.Any() || package.AssemblyReferences.Any() || package.GetContentFiles().Any())) { // for portable framework, we want to show the friendly short form (e.g. portable-win8+net45+wp8) instead of ".NETPortable, Profile=Profile104". string targetFrameworkString = VersionUtility.IsPortableFramework(Project.TargetFramework) ? VersionUtility.GetShortFrameworkName(Project.TargetFramework) : Project.TargetFramework.ToString(); throw new InvalidOperationException( String.Format(CultureInfo.CurrentCulture, NuGetResources.UnableToFindCompatibleItems, package.GetFullName(), targetFrameworkString)); } try { // Add content files Project.AddFiles(contentFiles, _fileTransformers); // Add the references to the reference path foreach (IPackageAssemblyReference assemblyReference in assemblyReferences) { if (assemblyReference.IsEmptyFolder()) { continue; } // Get the physical path of the assembly reference string referencePath = Path.Combine(PathResolver.GetInstallPath(package), assemblyReference.Path); string relativeReferencePath = PathUtility.GetRelativePath(Project.Root, referencePath); if (Project.ReferenceExists(assemblyReference.Name)) { Project.RemoveReference(assemblyReference.Name); } // The current implementation of all ProjectSystem does not use the Stream parameter at all. // We can't change the API now, so just pass in a null stream. Project.AddReference(relativeReferencePath, Stream.Null); } // Add GAC/Framework references foreach (FrameworkAssemblyReference frameworkReference in frameworkReferences) { if (!Project.ReferenceExists(frameworkReference.AssemblyName)) { Project.AddFrameworkReference(frameworkReference.AssemblyName); } } } finally { if (_packageReferenceRepository != null) { // save the used project's framework if the repository supports it. _packageReferenceRepository.AddPackage(package.Id, package.Version, Project.TargetFramework); } else { // Add package to local repository in the finally so that the user can uninstall it // if any exception occurs. This is easier than rolling back since the user can just // manually uninstall things that may have failed. // If this fails then the user is out of luck. LocalRepository.AddPackage(package); } } }
private void LogTargetFrameworkInfo(IPackage package, List <IPackageAssemblyReference> assemblyReferences, List <IPackageFile> contentFiles, List <IPackageFile> buildFiles) { if ((assemblyReferences.Count > 0) || ((contentFiles.Count > 0) || (buildFiles.Count > 0))) { string str = (this.Project.TargetFramework == null) ? string.Empty : VersionUtility.GetShortFrameworkName(this.Project.TargetFramework); object[] args = new object[] { package.GetFullName(), this.Project.ProjectName, str }; this.Logger.Log(MessageLevel.Debug, NuGetResources.Debug_TargetFrameworkInfoPrefix, args); if (assemblyReferences.Count > 0) { object[] objArray2 = new object[] { NuGetResources.Debug_TargetFrameworkInfo_AssemblyReferences, Path.GetDirectoryName(assemblyReferences[0].Path), VersionUtility.GetTargetFrameworkLogString(assemblyReferences[0].TargetFramework) }; this.Logger.Log(MessageLevel.Debug, NuGetResources.Debug_TargetFrameworkInfo, objArray2); } if (contentFiles.Count > 0) { object[] objArray3 = new object[] { NuGetResources.Debug_TargetFrameworkInfo_ContentFiles, Path.GetDirectoryName(contentFiles[0].Path), VersionUtility.GetTargetFrameworkLogString(contentFiles[0].TargetFramework) }; this.Logger.Log(MessageLevel.Debug, NuGetResources.Debug_TargetFrameworkInfo, objArray3); } if (buildFiles.Count > 0) { object[] objArray4 = new object[] { NuGetResources.Debug_TargetFrameworkInfo_BuildFiles, Path.GetDirectoryName(buildFiles[0].Path), VersionUtility.GetTargetFrameworkLogString(buildFiles[0].TargetFramework) }; this.Logger.Log(MessageLevel.Debug, NuGetResources.Debug_TargetFrameworkInfo, objArray4); } } }
protected virtual void ExtractPackageFilesToProject(IPackage package) { List <IPackageAssemblyReference> assemblyReferences = this.Project.GetCompatibleItemsCore <IPackageAssemblyReference>(package.AssemblyReferences).ToList <IPackageAssemblyReference>(); List <FrameworkAssemblyReference> list2 = this.Project.GetCompatibleItemsCore <FrameworkAssemblyReference>(package.FrameworkAssemblies).ToList <FrameworkAssemblyReference>(); List <IPackageFile> contentFiles = this.Project.GetCompatibleItemsCore <IPackageFile>(package.GetContentFiles()).ToList <IPackageFile>(); List <IPackageFile> buildFiles = this.Project.GetCompatibleItemsCore <IPackageFile>(package.GetBuildFiles()).ToList <IPackageFile>(); if ((assemblyReferences.Count == 0) && ((list2.Count == 0) && ((contentFiles.Count == 0) && ((buildFiles.Count == 0) && (package.FrameworkAssemblies.Any <FrameworkAssemblyReference>() || (package.AssemblyReferences.Any <IPackageAssemblyReference>() || (package.GetContentFiles().Any <IPackageFile>() || package.GetBuildFiles().Any <IPackageFile>()))))))) { FrameworkName targetFramework = this.Project.TargetFramework; string str = targetFramework.IsPortableFramework() ? VersionUtility.GetShortFrameworkName(targetFramework) : targetFramework?.ToString(); object[] args = new object[] { package.GetFullName(), str }; throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, NuGetResources.UnableToFindCompatibleItems, args)); } this.FilterAssemblyReferences(assemblyReferences, package.PackageAssemblyReferences); try { this.LogTargetFrameworkInfo(package, assemblyReferences, contentFiles, buildFiles); this.Project.AddFiles(contentFiles, this._fileTransformers); foreach (IPackageAssemblyReference reference in assemblyReferences) { if (!reference.IsEmptyFolder()) { string str2 = Path.Combine(this.PathResolver.GetInstallPath(package), reference.Path); string relativePath = PathUtility.GetRelativePath(this.Project.Root, str2); if (this.Project.ReferenceExists(reference.Name)) { this.Project.RemoveReference(reference.Name); } this.Project.AddReference(relativePath); } } foreach (FrameworkAssemblyReference reference2 in list2) { if (!this.Project.ReferenceExists(reference2.AssemblyName)) { this.Project.AddFrameworkReference(reference2.AssemblyName); } } foreach (IPackageFile file in buildFiles) { string targetFullPath = Path.Combine(this.PathResolver.GetInstallPath(package), file.Path); this.Project.AddImport(targetFullPath, file.Path.EndsWith(".props", StringComparison.OrdinalIgnoreCase) ? ProjectImportLocation.Top : ProjectImportLocation.Bottom); } } finally { if (this._packageReferenceRepository != null) { this._packageReferenceRepository.AddPackage(package.Id, package.Version, package.DevelopmentDependency, this.Project.TargetFramework); } else { this.LocalRepository.AddPackage(package); } } }