private void ResolveProjectReferences(VSLangProj.VSProject project, Dictionary <string, ReferenceModel> availableReplaceReferences, Dictionary <string, ReferenceModel> referencesThanMustBeAdded) { this.Worker.ReportProgress(50, GetAction(() => { this.Info.DoOnProjectModifyingStart(project); })); VSLangProj.References existingRefs = project.References; List <VSLangProj.Reference> refsToRemove; Dictionary <string, ReferenceModel> refsToAdd; this.GetReferencesToAddAndRemove(existingRefs, availableReplaceReferences, referencesThanMustBeAdded, out refsToRemove, out refsToAdd); for (int i = 0; i < refsToRemove.Count; i++) { VSLangProj.Reference refToRemove = refsToRemove[i]; ReferenceModel refModelToRemove = new ReferenceModel(refToRemove.Name, refToRemove.Path); refToRemove.Remove(); this.Worker.ReportProgress(50, GetAction(() => { this.Info.DoOnReferenceRemoved(refModelToRemove); })); } foreach (KeyValuePair <string, ReferenceModel> refToAdd in refsToAdd) { existingRefs.Add(refToAdd.Value.Path); this.Worker.ReportProgress(50, GetAction(() => { this.Info.DoOnReferenceAdded(refToAdd.Value); })); } this.Worker.ReportProgress(50, GetAction(() => { this.Info.DoOnProjectModifyingEnd(project); })); }
/// <summary> /// Adds the assembly reference. /// </summary> /// <param name="assemblyPath">The assembly path.</param> public void AddAssemblyReference(string assemblyPath) { Guard.ArgumentNotNullOrEmptyString(assemblyPath, "assemblyPath"); if (VSProject != null) { if (VSProject.Object is VSLangProj.VSProject) { VSLangProj.References references = ((VSLangProj.VSProject)VSProject.Object).References; if (references != null) { references.Add(assemblyPath); } } else if (VSProject.Object is VsWebSite.VSWebSite) { VsWebSite.AssemblyReferences references = ((VsWebSite.VSWebSite)VSProject.Object).References; if (references != null) { if (System.IO.Path.IsPathRooted(assemblyPath)) { references.AddFromFile(assemblyPath); } else { references.AddFromGAC(assemblyPath); } } } } }