Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Ward <ward.matt@gmail.com>2015-03-31 21:58:57 +0300
committerMatt Ward <ward.matt@gmail.com>2015-03-31 22:18:50 +0300
commitb048e5e39a692f29ca2b867bc63f59b362843486 (patch)
treeeb9516f098f38b7b6a093f682ce22767a30b87e8
parent1a68047794c232fc0ec329d7d3ad69262b3cdf9c (diff)
[NuGet] Keep Local Copy setting when updating a NuGet package.
Previously when updating a NuGet package the references would be added with Local Copy set to true and the previous value would be lost. MonoDevelop will generally have Local Copy set to false for assemblies that are shared across MonoDevelop and since more NuGet packages are being used in MonoDevelop this makes maintaining the Local Copy value a lot more work. Now if a reference is removed and then added during a NuGet update the Local Copy value will be kept. Note that currently this only works when updating the NuGet package from the Solution window. If you add a NuGet package from the Add Packages dialog then Local Copy is not preserved. This is a problem for pre-release NuGet packages since you cannot update to a new version of a pre-release NuGet package from the solution window.
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/TestableMonoDevelopProjectSystem.cs6
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/MonoDevelopProjectSystemTests.cs37
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/UpdatePackageActionTests.cs93
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.csproj2
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/DotNetProjectReferenceEventArgs.cs42
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/IPackageManagementEvents.cs5
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/LocalCopyReferenceMaintainer.cs71
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/PackageManagementEvents.cs19
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/SharpDevelopProjectSystem.cs7
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/ThreadSafePackageManagementEvents.cs21
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/UpdatePackageAction.cs4
11 files changed, 304 insertions, 3 deletions
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/TestableMonoDevelopProjectSystem.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/TestableMonoDevelopProjectSystem.cs
index e115f3a57a..708e46f146 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/TestableMonoDevelopProjectSystem.cs
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests.Helpers/TestableMonoDevelopProjectSystem.cs
@@ -38,6 +38,7 @@ namespace MonoDevelop.PackageManagement.Tests.Helpers
public Action<Stream> ActionPassedToPhysicalFileSystemAddFile;
public FakeFileService FakeFileService;
public FakePackageManagementProjectService FakeProjectService;
+ public PackageManagementEvents PackageManagementEvents;
public FakeLogger FakeLogger;
public string FileNamePassedToLogDeletedFile;
public FileNameAndDirectory FileNameAndDirectoryPassedToLogDeletedFileFromDirectory;
@@ -53,6 +54,7 @@ namespace MonoDevelop.PackageManagement.Tests.Helpers
project,
new FakeFileService (project),
new FakePackageManagementProjectService (),
+ new PackageManagementEvents (),
new FakeLogger ())
{
}
@@ -61,11 +63,13 @@ namespace MonoDevelop.PackageManagement.Tests.Helpers
IDotNetProject project,
IPackageManagementFileService fileService,
IPackageManagementProjectService projectService,
+ PackageManagementEvents packageManagementEvents,
FakeLogger logger)
- : base (project, fileService, projectService, GuiSyncDispatcher)
+ : base (project, fileService, projectService, packageManagementEvents, GuiSyncDispatcher)
{
FakeFileService = (FakeFileService)fileService;
FakeProjectService = (FakePackageManagementProjectService)projectService;
+ PackageManagementEvents = packageManagementEvents;
Logger = logger;
}
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/MonoDevelopProjectSystemTests.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/MonoDevelopProjectSystemTests.cs
index 7e077bf163..9d67d3f590 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/MonoDevelopProjectSystemTests.cs
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/MonoDevelopProjectSystemTests.cs
@@ -1174,6 +1174,43 @@ namespace MonoDevelop.PackageManagement.Tests
Assert.AreEqual (1, targetCountBeforeSave);
Assert.AreEqual (0, msbuildProject.Targets.Count ());
}
+
+ [Test]
+ public void AddReference_AddReferenceToNUnitFramework_ReferenceAddingEventIsFired ()
+ {
+ CreateTestProject ();
+ CreateProjectSystem (project);
+ ProjectReference referenceBeingAdded = null;
+ projectSystem.PackageManagementEvents.ReferenceAdding += (sender, e) => {
+ referenceBeingAdded = e.Reference;
+ };
+
+ string fileName = @"d:\projects\packages\nunit\nunit.framework.dll".ToNativePath ();
+ projectSystem.AddReference (fileName, null);
+
+ Assert.AreEqual (fileName, referenceBeingAdded.HintPath);
+ Assert.IsTrue (referenceBeingAdded.LocalCopy);
+ }
+
+ [Test]
+ public void RemoveReference_RemoveReferenceToNUnitFramework_ReferenceRemovingEventIsFired ()
+ {
+ CreateTestProject ();
+ CreateProjectSystem (project);
+ string fileName = @"d:\projects\packages\nunit\nunit.framework.dll".ToNativePath ();
+ ProjectHelper.AddReference (project, fileName);
+ ProjectReference referenceBeingRemoved = null;
+ bool projectIsSaved = false;
+ projectSystem.PackageManagementEvents.ReferenceRemoving += (sender, e) => {
+ referenceBeingRemoved = e.Reference;
+ projectIsSaved = project.IsSaved;
+ };
+
+ projectSystem.RemoveReference (fileName);
+
+ Assert.AreEqual (fileName, referenceBeingRemoved.HintPath);
+ Assert.IsFalse (projectIsSaved);
+ }
}
}
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/UpdatePackageActionTests.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/UpdatePackageActionTests.cs
index 0e5bb1185a..15061c91a7 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/UpdatePackageActionTests.cs
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Tests/MonoDevelop.PackageManagement.Tests/UpdatePackageActionTests.cs
@@ -31,6 +31,7 @@ using ICSharpCode.PackageManagement;
using NuGet;
using NUnit.Framework;
using MonoDevelop.PackageManagement.Tests.Helpers;
+using MonoDevelop.Projects;
namespace MonoDevelop.PackageManagement.Tests
{
@@ -474,6 +475,98 @@ namespace MonoDevelop.PackageManagement.Tests
Assert.IsFalse (fakeProject.IsUpdatePackageCalled);
AssertMessageIsLogged ("No updates available for 'MyPackage' in project 'MyProject'.");
}
+
+ [Test]
+ public void Execute_ReferenceBeingUpdatedHasLocalCopyTrue_ReferenceAddedHasLocalCopyTrue ()
+ {
+ CreateSolution ();
+ fakeProject.FakePackages.Add (new FakePackage ("Test", "1.0"));
+ action.Package = new FakePackage ("Test", "1.1");
+ var firstReferenceBeingAdded = new ProjectReference (ReferenceType.Assembly, "NewAssembly");
+ var secondReferenceBeingAdded = new ProjectReference (ReferenceType.Assembly, "NUnit.Framework");
+ fakeProject.UpdatePackageAction = (p, a) => {
+ var referenceBeingRemoved = new ProjectReference (ReferenceType.Assembly, "NUnit.Framework") {
+ LocalCopy = true
+ };
+ packageManagementEvents.OnReferenceRemoving (referenceBeingRemoved);
+ packageManagementEvents.OnReferenceAdding (firstReferenceBeingAdded);
+ packageManagementEvents.OnReferenceAdding (secondReferenceBeingAdded);
+ };
+ action.Execute ();
+
+ Assert.IsTrue (firstReferenceBeingAdded.LocalCopy);
+ Assert.IsTrue (secondReferenceBeingAdded.LocalCopy);
+ }
+
+ [Test]
+ public void Execute_ReferenceBeingUpdatedHasLocalCopyTrueButCaseIsDifferent_ReferenceAddedHasLocalCopyTrue ()
+ {
+ CreateSolution ();
+ fakeProject.FakePackages.Add (new FakePackage ("Test", "1.0"));
+ action.Package = new FakePackage ("Test", "1.1");
+ var firstReferenceBeingAdded = new ProjectReference (ReferenceType.Assembly, "NewAssembly");
+ var secondReferenceBeingAdded = new ProjectReference (ReferenceType.Assembly, "NUnit.Framework");
+ fakeProject.UpdatePackageAction = (p, a) => {
+ var referenceBeingRemoved = new ProjectReference (ReferenceType.Assembly, "nunit.framework") {
+ LocalCopy = true
+ };
+ packageManagementEvents.OnReferenceRemoving (referenceBeingRemoved);
+ packageManagementEvents.OnReferenceAdding (firstReferenceBeingAdded);
+ packageManagementEvents.OnReferenceAdding (secondReferenceBeingAdded);
+ };
+ action.Execute ();
+
+ Assert.IsTrue (firstReferenceBeingAdded.LocalCopy);
+ Assert.IsTrue (secondReferenceBeingAdded.LocalCopy);
+ }
+
+ [Test]
+ public void Execute_ReferenceBeingUpdatedHasLocalCopyFalse_ReferenceAddedHasLocalCopyFalse ()
+ {
+ CreateSolution ();
+ fakeProject.FakePackages.Add (new FakePackage ("Test", "1.0"));
+ action.Package = new FakePackage ("Test", "1.1");
+ var firstReferenceBeingAdded = new ProjectReference (ReferenceType.Assembly, "NewAssembly") {
+ LocalCopy = true
+ };
+ var secondReferenceBeingAdded = new ProjectReference (ReferenceType.Assembly, "NUnit.Framework");
+ fakeProject.UpdatePackageAction = (p, a) => {
+ var referenceBeingRemoved = new ProjectReference (ReferenceType.Assembly, "NUnit.Framework") {
+ LocalCopy = false
+ };
+ packageManagementEvents.OnReferenceRemoving (referenceBeingRemoved);
+ packageManagementEvents.OnReferenceAdding (firstReferenceBeingAdded);
+ packageManagementEvents.OnReferenceAdding (secondReferenceBeingAdded);
+ };
+ action.Execute ();
+
+ Assert.IsTrue (firstReferenceBeingAdded.LocalCopy);
+ Assert.IsFalse (secondReferenceBeingAdded.LocalCopy);
+ }
+
+ [Test]
+ public void Execute_ReferenceBeingUpdatedHasLocalCopyFalseButCaseIsDifferent_ReferenceAddedHasLocalCopyFalse ()
+ {
+ CreateSolution ();
+ fakeProject.FakePackages.Add (new FakePackage ("Test", "1.0"));
+ action.Package = new FakePackage ("Test", "1.1");
+ var firstReferenceBeingAdded = new ProjectReference (ReferenceType.Assembly, "NewAssembly") {
+ LocalCopy = true
+ };
+ var secondReferenceBeingAdded = new ProjectReference (ReferenceType.Assembly, "NUnit.Framework");
+ fakeProject.UpdatePackageAction = (p, a) => {
+ var referenceBeingRemoved = new ProjectReference (ReferenceType.Assembly, "nunit.framework") {
+ LocalCopy = false
+ };
+ packageManagementEvents.OnReferenceRemoving (referenceBeingRemoved);
+ packageManagementEvents.OnReferenceAdding (firstReferenceBeingAdded);
+ packageManagementEvents.OnReferenceAdding (secondReferenceBeingAdded);
+ };
+ action.Execute ();
+
+ Assert.IsTrue (firstReferenceBeingAdded.LocalCopy);
+ Assert.IsFalse (secondReferenceBeingAdded.LocalCopy);
+ }
}
}
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.csproj b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.csproj
index 814e2943d8..e63f6890f8 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.csproj
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.csproj
@@ -368,6 +368,8 @@
<Compile Include="MonoDevelop.PackageManagement\CheckForUpdatesTaskRunner.cs" />
<Compile Include="MonoDevelop.PackageManagement\CheckForUpdatesTask.cs" />
<Compile Include="MonoDevelop.PackageManagement\ProjectReloadedEventArgs.cs" />
+ <Compile Include="MonoDevelop.PackageManagement\DotNetProjectReferenceEventArgs.cs" />
+ <Compile Include="MonoDevelop.PackageManagement\LocalCopyReferenceMaintainer.cs" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="MonoDevelop.PackageManagement.addin.xml" />
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/DotNetProjectReferenceEventArgs.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/DotNetProjectReferenceEventArgs.cs
new file mode 100644
index 0000000000..09d4cf6528
--- /dev/null
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/DotNetProjectReferenceEventArgs.cs
@@ -0,0 +1,42 @@
+//
+// DotNetProjectReferenceEventArgs.cs
+//
+// Author:
+// Matt Ward <matt.ward@xamarin.com>
+//
+// Copyright (c) 2015 Xamarin Inc. (http://xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using MonoDevelop.Projects;
+
+namespace MonoDevelop.PackageManagement
+{
+ public class DotNetProjectReferenceEventArgs : EventArgs
+ {
+ public DotNetProjectReferenceEventArgs (ProjectReference reference)
+ {
+ Reference = reference;
+ }
+
+ public ProjectReference Reference { get; private set; }
+ }
+}
+
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/IPackageManagementEvents.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/IPackageManagementEvents.cs
index 06e1edced4..5b0bb4fb1f 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/IPackageManagementEvents.cs
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/IPackageManagementEvents.cs
@@ -31,6 +31,7 @@ using System.Collections.Generic;
using MonoDevelop.Core;
using MonoDevelop.PackageManagement;
using NuGet;
+using MonoDevelop.Projects;
namespace ICSharpCode.PackageManagement
{
@@ -51,6 +52,8 @@ namespace ICSharpCode.PackageManagement
event EventHandler<FileRemovingEventArgs> FileRemoving;
event EventHandler UpdatedPackagesAvailable;
event EventHandler<PackageRestoredEventArgs> PackageRestored;
+ event EventHandler<DotNetProjectReferenceEventArgs> ReferenceAdding;
+ event EventHandler<DotNetProjectReferenceEventArgs> ReferenceRemoving;
void OnPackageOperationsStarting();
void OnPackageOperationsFinished();
@@ -67,6 +70,8 @@ namespace ICSharpCode.PackageManagement
void OnUpdatedPackagesAvailable ();
bool OnFileRemoving (string path);
void OnPackageRestored (IPackage package);
+ void OnReferenceAdding (ProjectReference reference);
+ void OnReferenceRemoving (ProjectReference reference);
[Obsolete]
void OnParentPackageInstalled (IPackage package, IPackageManagementProject project);
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/LocalCopyReferenceMaintainer.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/LocalCopyReferenceMaintainer.cs
new file mode 100644
index 0000000000..2637df430b
--- /dev/null
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/LocalCopyReferenceMaintainer.cs
@@ -0,0 +1,71 @@
+//
+// LocalCopyReferenceMaintainer.cs
+//
+// Author:
+// Matt Ward <matt.ward@xamarin.com>
+//
+// Copyright (c) 2015 Xamarin Inc. (http://xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using ICSharpCode.PackageManagement;
+using MonoDevelop.Projects;
+
+namespace MonoDevelop.PackageManagement
+{
+ public class LocalCopyReferenceMaintainer : IDisposable
+ {
+ readonly IPackageManagementEvents packageManagementEvents;
+ List<ProjectReference> referencesRemovedWithLocalCopyFalse = new List<ProjectReference> ();
+
+ public LocalCopyReferenceMaintainer (IPackageManagementEvents packageManagementEvents)
+ {
+ this.packageManagementEvents = packageManagementEvents;
+ packageManagementEvents.ReferenceRemoving += ProjectReferenceBeingRemoved;
+ packageManagementEvents.ReferenceAdding += ProjectReferenceBeingAdded;
+ }
+
+ void ProjectReferenceBeingRemoved (object sender, DotNetProjectReferenceEventArgs e)
+ {
+ if (!e.Reference.LocalCopy) {
+ referencesRemovedWithLocalCopyFalse.Add (e.Reference);
+ }
+ }
+
+ void ProjectReferenceBeingAdded (object sender, DotNetProjectReferenceEventArgs e)
+ {
+ e.Reference.LocalCopy = referencesRemovedWithLocalCopyFalse.All (reference => !IsMatch (reference, e.Reference));
+ }
+
+ static bool IsMatch (ProjectReference a, ProjectReference b)
+ {
+ return String.Equals (a.Reference, b.Reference, StringComparison.OrdinalIgnoreCase);
+ }
+
+ public void Dispose ()
+ {
+ packageManagementEvents.ReferenceRemoving -= ProjectReferenceBeingRemoved;
+ packageManagementEvents.ReferenceAdding -= ProjectReferenceBeingAdded;
+ }
+ }
+}
+
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/PackageManagementEvents.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/PackageManagementEvents.cs
index 6ed96e3ca7..f6462784f2 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/PackageManagementEvents.cs
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/PackageManagementEvents.cs
@@ -31,6 +31,7 @@ using System.Collections.Generic;
using MonoDevelop.Core;
using NuGet;
using MonoDevelop.PackageManagement;
+using MonoDevelop.Projects;
namespace ICSharpCode.PackageManagement
{
@@ -190,5 +191,23 @@ namespace ICSharpCode.PackageManagement
PackageRestored (this, new PackageRestoredEventArgs (package));
}
}
+
+ public event EventHandler<DotNetProjectReferenceEventArgs> ReferenceRemoving;
+
+ public void OnReferenceRemoving (ProjectReference reference)
+ {
+ if (ReferenceRemoving != null) {
+ ReferenceRemoving (this, new DotNetProjectReferenceEventArgs (reference));
+ }
+ }
+
+ public event EventHandler<DotNetProjectReferenceEventArgs> ReferenceAdding;
+
+ public void OnReferenceAdding (ProjectReference reference)
+ {
+ if (ReferenceAdding != null) {
+ ReferenceAdding (this, new DotNetProjectReferenceEventArgs (reference));
+ }
+ }
}
}
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/SharpDevelopProjectSystem.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/SharpDevelopProjectSystem.cs
index 528b8e7ee9..87c1707789 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/SharpDevelopProjectSystem.cs
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/SharpDevelopProjectSystem.cs
@@ -27,7 +27,6 @@
//
using System;
-using System.Collections.Generic;
using System.IO;
using System.Runtime.Versioning;
@@ -45,6 +44,7 @@ namespace ICSharpCode.PackageManagement
IDotNetProject project;
ProjectTargetFramework targetFramework;
IPackageManagementFileService fileService;
+ IPackageManagementEvents packageManagementEvents;
Action<MessageHandler> guiSyncDispatcher;
public SharpDevelopProjectSystem(DotNetProject project)
@@ -52,6 +52,7 @@ namespace ICSharpCode.PackageManagement
new DotNetProjectProxy (project),
new PackageManagementFileService (),
PackageManagementServices.ProjectService,
+ PackageManagementServices.PackageManagementEvents,
DispatchService.GuiSyncDispatch)
{
}
@@ -60,11 +61,13 @@ namespace ICSharpCode.PackageManagement
IDotNetProject project,
IPackageManagementFileService fileService,
IPackageManagementProjectService projectService,
+ IPackageManagementEvents packageManagementEvents,
Action<MessageHandler> guiSyncDispatcher)
: base (AppendTrailingSlashToDirectory (project.BaseDirectory))
{
this.project = project;
this.fileService = fileService;
+ this.packageManagementEvents = packageManagementEvents;
this.guiSyncDispatcher = guiSyncDispatcher;
}
@@ -109,6 +112,7 @@ namespace ICSharpCode.PackageManagement
{
GuiSyncDispatch (() => {
ProjectReference assemblyReference = CreateReference (referencePath);
+ packageManagementEvents.OnReferenceAdding (assemblyReference);
AddReferenceToProject (assemblyReference);
});
}
@@ -202,6 +206,7 @@ namespace ICSharpCode.PackageManagement
GuiSyncDispatch (() => {
ProjectReference referenceProjectItem = FindReference (name);
if (referenceProjectItem != null) {
+ packageManagementEvents.OnReferenceRemoving (referenceProjectItem);
project.References.Remove (referenceProjectItem);
project.Save ();
LogRemovedReferenceFromProject (referenceProjectItem);
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/ThreadSafePackageManagementEvents.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/ThreadSafePackageManagementEvents.cs
index ac3dc882fd..5fd0086856 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/ThreadSafePackageManagementEvents.cs
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/ThreadSafePackageManagementEvents.cs
@@ -32,6 +32,7 @@ using MonoDevelop.Core;
using MonoDevelop.Ide;
using NuGet;
using MonoDevelop.PackageManagement;
+using MonoDevelop.Projects;
namespace ICSharpCode.PackageManagement
{
@@ -298,5 +299,25 @@ namespace ICSharpCode.PackageManagement
{
unsafeEvents.OnPackageRestored (package);
}
+
+ public event EventHandler<DotNetProjectReferenceEventArgs> ReferenceAdding {
+ add { unsafeEvents.ReferenceAdding += value; }
+ remove { unsafeEvents.ReferenceAdding -= value; }
+ }
+
+ public event EventHandler<DotNetProjectReferenceEventArgs> ReferenceRemoving {
+ add { unsafeEvents.ReferenceRemoving += value; }
+ remove { unsafeEvents.ReferenceRemoving -= value; }
+ }
+
+ public void OnReferenceAdding (ProjectReference reference)
+ {
+ unsafeEvents.OnReferenceAdding (reference);
+ }
+
+ public void OnReferenceRemoving (ProjectReference reference)
+ {
+ unsafeEvents.OnReferenceRemoving (reference);
+ }
}
}
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/UpdatePackageAction.cs b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/UpdatePackageAction.cs
index 1126025531..86467c8156 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/UpdatePackageAction.cs
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement/UpdatePackageAction.cs
@@ -75,7 +75,9 @@ namespace ICSharpCode.PackageManagement
{
if (ShouldUpdatePackage ()) {
using (IDisposable monitor = CreateFileMonitor ()) {
- Project.UpdatePackage (Package, this);
+ using (IDisposable referenceMaintainer = new LocalCopyReferenceMaintainer (packageManagementEvents)) {
+ Project.UpdatePackage (Package, this);
+ }
}
OnParentPackageInstalled ();
} else {