diff --git a/SharpDevelop.Tests.sln b/SharpDevelop.Tests.sln
index c170b995de..efa2b430af 100644
--- a/SharpDevelop.Tests.sln
+++ b/SharpDevelop.Tests.sln
@@ -1,8 +1,10 @@
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
-# SharpDevelop 5.0
+# SharpDevelop 4.3
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{256F5C28-532C-44C0-8AB8-D8EC5E492E01}"
+ ProjectSection(SolutionItems) = postProject
+ EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.BuildWorker35", "src\Main\ICSharpCode.SharpDevelop.BuildWorker35\ICSharpCode.SharpDevelop.BuildWorker35.csproj", "{B5F54272-49F0-40DB-845A-8D837875D3BA}"
EndProject
@@ -25,6 +27,8 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpDevelop", "src\Main\SharpDevelop\SharpDevelop.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{2A232EF1-EB95-41C6-B63A-C106E0C95D3C}"
+ ProjectSection(SolutionItems) = postProject
+ EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil", "src\Libraries\cecil\Mono.Cecil.csproj", "{D68133BD-1E63-496E-9EDE-4FBDBF77B486}"
EndProject
@@ -54,14 +58,20 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Decompiler", "src\Libraries\ICSharpCode.Decompiler\ICSharpCode.Decompiler.csproj", "{984CC812-9470-4A13-AFF9-CC44068D666C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{39327899-ED91-4F7F-988C-4FE4E17C014D}"
+ ProjectSection(SolutionItems) = postProject
+ EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Version Control", "Version Control", "{F208FF4F-E5D8-41D5-A7C7-B463976F156E}"
+ ProjectSection(SolutionItems) = postProject
+ EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitAddIn", "src\AddIns\VersionControl\GitAddIn\GitAddIn.csproj", "{83F15BA7-8478-4664-81BB-A82F146D88B3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SubversionAddIn", "src\AddIns\VersionControl\SubversionAddIn\SubversionAddIn.csproj", "{17F4D7E0-6933-4C2E-8714-FD7E98D625D5}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Language Bindings", "Language Bindings", "{E0646C25-36F2-4524-969F-FA621353AB94}"
+ ProjectSection(SolutionItems) = postProject
+ EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding", "src\AddIns\BackendBindings\CSharpBinding\Project\CSharpBinding.csproj", "{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}"
EndProject
@@ -90,6 +100,8 @@ EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "VBBinding", "src\AddIns\BackendBindings\VBBinding\Project\VBBinding.vbproj", "{6D209CBB-D8C1-478A-BC30-D3FC87B7858F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Misc", "Misc", "{F3662720-9EA2-4591-BBC6-97361DCE50A9}"
+ ProjectSection(SolutionItems) = postProject
+ EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HelpViewer", "src\AddIns\Misc\HelpViewer\HelpViewer.csproj", "{80F76D10-0B44-4D55-B4BD-DAEB5464090C}"
EndProject
@@ -104,6 +116,8 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RegExpTk", "src\AddIns\Misc\RegExpTk\Project\RegExpTk.csproj", "{64A3E5E6-90BF-47F6-94DF-68C94B62C817}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UsageDataCollector", "UsageDataCollector", "{DEFC8584-BEC3-4921-BD0F-40482E450B7B}"
+ ProjectSection(SolutionItems) = postProject
+ EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UsageDataCollector", "src\AddIns\Misc\UsageDataCollector\UsageDataCollector\UsageDataCollector.csproj", "{6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}"
EndProject
@@ -116,6 +130,8 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextTemplating", "src\AddIns\Misc\TextTemplating\Project\TextTemplating.csproj", "{B5D8C3E6-42EC-4D4B-AD05-3644B32563EF}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PackageManagement", "PackageManagement", "{485A4CCF-55CF-49F4-BD6D-A22B788C67DA}"
+ ProjectSection(SolutionItems) = postProject
+ EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManagement", "src\AddIns\Misc\PackageManagement\Project\PackageManagement.csproj", "{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1}"
EndProject
@@ -130,12 +146,16 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManagement.Cmdlets.Tests", "src\AddIns\Misc\PackageManagement\Cmdlets\Test\PackageManagement.Cmdlets.Tests.csproj", "{11115C83-3DB1-431F-8B98-59040359238D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddInManager2", "AddInManager2", "{1F88F080-AD7C-4B03-9895-20C26282429D}"
+ ProjectSection(SolutionItems) = postProject
+ EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddInManager2", "src\AddIns\Misc\AddInManager2\Project\AddInManager2.csproj", "{60480C2F-F228-4D86-B98F-AF75A7DCEC34}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddInManager2.Tests", "src\AddIns\Misc\AddInManager2\AddInManager2.Tests\AddInManager2.Tests.csproj", "{0D0CB6E5-1EAD-471F-96B9-BFF84057BCF5}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Reports", "Reports", "{FEDD3FD9-0480-43CC-913C-4E0876DDA852}"
+ ProjectSection(SolutionItems) = postProject
+ EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Reports.Addin", "src\AddIns\Misc\Reports\ICSharpCode.Reports.Addin\ICSharpCode.Reports.Addin.csproj", "{62033CC6-01CD-47A2-ADFD-188E9C524C0A}"
EndProject
@@ -148,6 +168,8 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Irony", "src\AddIns\Misc\Reports\Irony\Irony.csproj", "{47B2D204-C993-4489-8B83-6DA7321CFAE0}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Display Bindings", "Display Bindings", "{11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}"
+ ProjectSection(SolutionItems) = postProject
+ EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonEdit.AddIn", "src\AddIns\DisplayBindings\AvalonEdit.AddIn\AvalonEdit.AddIn.csproj", "{0162E499-42D0-409B-AA25-EED21F75336B}"
EndProject
@@ -162,6 +184,8 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ILSpyAddIn", "src\AddIns\DisplayBindings\ILSpyAddIn\ILSpyAddIn.csproj", "{8AA421C8-D7AF-4957-9F43-5135328ACB24}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Data", "Data", "{0F5192F2-0744-4BA9-A074-6BE82D111B8D}"
+ ProjectSection(SolutionItems) = postProject
+ EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Data.Addin", "src\AddIns\DisplayBindings\Data\ICSharpCode.Data.Addin\ICSharpCode.Data.Addin.csproj", "{A9F12710-24E4-46D4-832C-6ECB395B9EAD}"
EndProject
@@ -176,6 +200,8 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Data.SQLServer", "src\AddIns\DisplayBindings\Data\ICSharpCode.Data.SQLServer\ICSharpCode.Data.SQLServer.csproj", "{AFE34868-AFA1-4E1C-9450-47AB4BE329D5}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WpfDesign", "WpfDesign", "{83BAB756-1010-4A2F-9B9D-7F9EBCB288F5}"
+ ProjectSection(SolutionItems) = postProject
+ EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfDesign", "src\AddIns\DisplayBindings\WpfDesign\WpfDesign\Project\WpfDesign.csproj", "{66A378A1-E9F4-4AD5-8946-D0EC06C2902F}"
EndProject
@@ -192,6 +218,8 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormsDesigner", "src\AddIns\DisplayBindings\FormsDesigner\Project\FormsDesigner.csproj", "{9E951B9F-6AC2-4537-9D0B-0AE7C026D5A1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Debugger", "Debugger", "{AF5E0DC1-1FA0-4346-A436-0C817C68F7C1}"
+ ProjectSection(SolutionItems) = postProject
+ EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Core", "src\AddIns\Debugger\Debugger.Core\Debugger.Core.csproj", "{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}"
EndProject
@@ -200,6 +228,8 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Tests", "src\AddIns\Debugger\Debugger.Tests\Debugger.Tests.csproj", "{A4C858C8-51B6-4265-A695-A20FCEBA1D19}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Analysis", "Analysis", "{B3352C08-3CB4-4DD9-996F-B9DCE4356BB9}"
+ ProjectSection(SolutionItems) = postProject
+ EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "src\AddIns\Analysis\UnitTesting\UnitTesting.csproj", "{1F261725-6318-4434-A1B1-6C70CE4CD324}"
EndProject
@@ -220,6 +250,8 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeQuality", "src\AddIns\Analysis\CodeQuality\CodeQuality.csproj", "{0A029008-4973-4256-9150-9AF12845C547}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Profiler", "Profiler", "{7D16E1F9-0F9F-4A05-A162-A59C05E88B68}"
+ ProjectSection(SolutionItems) = postProject
+ EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Profiler.Tests", "src\AddIns\Analysis\Profiler\Tests\Profiler.Tests\Profiler.Tests.csproj", "{DAEA4E6C-02CD-47DA-806B-1FCE1E9675EC}"
EndProject
@@ -651,19 +683,24 @@ Global
{D68133BD-1E63-496E-9EDE-4FBDBF77B486} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C}
{6222A3A1-83CE-47A3-A4E4-A018F82D44D8} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C}
{E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C}
- {3B2A5653-EC97-4001-BB9B-D90F1AF2C371} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865}
- {53DCA265-3C3C-42F9-B647-F72BA678122B} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865}
- {DC393B66-92ED-4CAD-AB25-CFEF23F3D7C6} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865}
- {63D3B27A-D966-4902-90B3-30290E1692F1} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865}
{2FF700C2-A38A-48BD-A637-8CAFD4FE6237} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C}
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C}
{4139CCF6-FB49-4A9D-B2CF-331E9EA3198D} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C}
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C}
{984CC812-9470-4A13-AFF9-CC44068D666C} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C}
+ {3B2A5653-EC97-4001-BB9B-D90F1AF2C371} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865}
+ {53DCA265-3C3C-42F9-B647-F72BA678122B} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865}
+ {DC393B66-92ED-4CAD-AB25-CFEF23F3D7C6} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865}
+ {63D3B27A-D966-4902-90B3-30290E1692F1} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865}
{F208FF4F-E5D8-41D5-A7C7-B463976F156E} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
+ {E0646C25-36F2-4524-969F-FA621353AB94} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
+ {F3662720-9EA2-4591-BBC6-97361DCE50A9} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
+ {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
+ {AF5E0DC1-1FA0-4346-A436-0C817C68F7C1} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
+ {B3352C08-3CB4-4DD9-996F-B9DCE4356BB9} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
+ {E2FD63DA-8478-4066-934C-DA82A852C83A} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{83F15BA7-8478-4664-81BB-A82F146D88B3} = {F208FF4F-E5D8-41D5-A7C7-B463976F156E}
{17F4D7E0-6933-4C2E-8714-FD7E98D625D5} = {F208FF4F-E5D8-41D5-A7C7-B463976F156E}
- {E0646C25-36F2-4524-969F-FA621353AB94} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {E0646C25-36F2-4524-969F-FA621353AB94}
{E954F3CB-A446-492F-A664-2B376EBC86E8} = {E0646C25-36F2-4524-969F-FA621353AB94}
{70966F84-74C9-4067-A379-0C674A929233} = {E0646C25-36F2-4524-969F-FA621353AB94}
@@ -677,7 +714,6 @@ Global
{85C09AD8-183B-403A-869A-7226646218A9} = {E0646C25-36F2-4524-969F-FA621353AB94}
{CAD4D128-5A67-444B-88AE-37E0AF79C57E} = {E0646C25-36F2-4524-969F-FA621353AB94}
{6D209CBB-D8C1-478A-BC30-D3FC87B7858F} = {E0646C25-36F2-4524-969F-FA621353AB94}
- {F3662720-9EA2-4591-BBC6-97361DCE50A9} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{80F76D10-0B44-4D55-B4BD-DAEB5464090C} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{9196DD8A-B4D4-4780-8742-C5762E547FC2} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
@@ -685,28 +721,27 @@ Global
{D022A6CE-7438-41E8-AC64-F2DE18EC54C6} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{64A3E5E6-90BF-47F6-94DF-68C94B62C817} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{DEFC8584-BEC3-4921-BD0F-40482E450B7B} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
- {6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0} = {DEFC8584-BEC3-4921-BD0F-40482E450B7B}
- {0008FCE9-9EB4-4E2E-979B-553278E5BBA6} = {DEFC8584-BEC3-4921-BD0F-40482E450B7B}
{A569DCC1-C608-45FD-B770-4F79335EF154} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{5186325C-DD7F-4246-9BE7-3F384EFBF5A6} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{B5D8C3E6-42EC-4D4B-AD05-3644B32563EF} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{485A4CCF-55CF-49F4-BD6D-A22B788C67DA} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
+ {1F88F080-AD7C-4B03-9895-20C26282429D} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
+ {FEDD3FD9-0480-43CC-913C-4E0876DDA852} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
+ {6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0} = {DEFC8584-BEC3-4921-BD0F-40482E450B7B}
+ {0008FCE9-9EB4-4E2E-979B-553278E5BBA6} = {DEFC8584-BEC3-4921-BD0F-40482E450B7B}
{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1} = {485A4CCF-55CF-49F4-BD6D-A22B788C67DA}
{A406803B-C584-43A3-BCEE-A0BB3132CB5F} = {485A4CCF-55CF-49F4-BD6D-A22B788C67DA}
{C3F15E22-5793-4129-AF8C-6229112B86D2} = {485A4CCF-55CF-49F4-BD6D-A22B788C67DA}
{56E98A01-8398-4A08-9578-C7337711A52B} = {485A4CCF-55CF-49F4-BD6D-A22B788C67DA}
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D} = {485A4CCF-55CF-49F4-BD6D-A22B788C67DA}
{11115C83-3DB1-431F-8B98-59040359238D} = {485A4CCF-55CF-49F4-BD6D-A22B788C67DA}
- {1F88F080-AD7C-4B03-9895-20C26282429D} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{60480C2F-F228-4D86-B98F-AF75A7DCEC34} = {1F88F080-AD7C-4B03-9895-20C26282429D}
{0D0CB6E5-1EAD-471F-96B9-BFF84057BCF5} = {1F88F080-AD7C-4B03-9895-20C26282429D}
- {FEDD3FD9-0480-43CC-913C-4E0876DDA852} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{62033CC6-01CD-47A2-ADFD-188E9C524C0A} = {FEDD3FD9-0480-43CC-913C-4E0876DDA852}
{2EE63FDD-7F49-40BD-8A2E-240848B9FA83} = {FEDD3FD9-0480-43CC-913C-4E0876DDA852}
{0884566C-E013-4185-B223-47547AA75167} = {FEDD3FD9-0480-43CC-913C-4E0876DDA852}
{1491E558-9C19-4EAC-9406-868AB8181F38} = {FEDD3FD9-0480-43CC-913C-4E0876DDA852}
{47B2D204-C993-4489-8B83-6DA7321CFAE0} = {FEDD3FD9-0480-43CC-913C-4E0876DDA852}
- {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{0162E499-42D0-409B-AA25-EED21F75336B} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{E618A9CD-A39F-4925-A538-E8A3FEF24E54} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{DCA2703D-250A-463E-A68A-07ED105AE6BD} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
@@ -714,25 +749,23 @@ Global
{DFB936AD-90EE-4B4F-941E-4F4A636F0D92} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{8AA421C8-D7AF-4957-9F43-5135328ACB24} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{0F5192F2-0744-4BA9-A074-6BE82D111B8D} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
+ {83BAB756-1010-4A2F-9B9D-7F9EBCB288F5} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
+ {85226AFB-CE71-4851-9A75-7EEC663A8E8A} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
+ {9E951B9F-6AC2-4537-9D0B-0AE7C026D5A1} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{A9F12710-24E4-46D4-832C-6ECB395B9EAD} = {0F5192F2-0744-4BA9-A074-6BE82D111B8D}
{B7823AE9-4B43-4859-8796-2EBDC116FBB8} = {0F5192F2-0744-4BA9-A074-6BE82D111B8D}
{BAD94D6E-4159-4CB6-B991-486F412D9BB6} = {0F5192F2-0744-4BA9-A074-6BE82D111B8D}
{5C70D6AB-0A33-43F9-B8B5-54558C35BBB1} = {0F5192F2-0744-4BA9-A074-6BE82D111B8D}
{EEF5E054-4192-4A57-8FBF-E860D808A51D} = {0F5192F2-0744-4BA9-A074-6BE82D111B8D}
{AFE34868-AFA1-4E1C-9450-47AB4BE329D5} = {0F5192F2-0744-4BA9-A074-6BE82D111B8D}
- {83BAB756-1010-4A2F-9B9D-7F9EBCB288F5} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{66A378A1-E9F4-4AD5-8946-D0EC06C2902F} = {83BAB756-1010-4A2F-9B9D-7F9EBCB288F5}
{9A9D6FD4-6A2E-455D-ACC3-DDA775FE9865} = {83BAB756-1010-4A2F-9B9D-7F9EBCB288F5}
{943DBBB3-E84E-4CF4-917C-C05AFA8743C1} = {83BAB756-1010-4A2F-9B9D-7F9EBCB288F5}
{78CC29AC-CC79-4355-B1F2-97936DF198AC} = {83BAB756-1010-4A2F-9B9D-7F9EBCB288F5}
{88DA149F-21B2-48AB-82C4-28FB6BDFD783} = {83BAB756-1010-4A2F-9B9D-7F9EBCB288F5}
- {85226AFB-CE71-4851-9A75-7EEC663A8E8A} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
- {9E951B9F-6AC2-4537-9D0B-0AE7C026D5A1} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
- {AF5E0DC1-1FA0-4346-A436-0C817C68F7C1} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {AF5E0DC1-1FA0-4346-A436-0C817C68F7C1}
{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {AF5E0DC1-1FA0-4346-A436-0C817C68F7C1}
{A4C858C8-51B6-4265-A695-A20FCEBA1D19} = {AF5E0DC1-1FA0-4346-A436-0C817C68F7C1}
- {B3352C08-3CB4-4DD9-996F-B9DCE4356BB9} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{1F261725-6318-4434-A1B1-6C70CE4CD324} = {B3352C08-3CB4-4DD9-996F-B9DCE4356BB9}
{44A8DE09-CAB9-49D8-9CFC-5EB0A552F181} = {B3352C08-3CB4-4DD9-996F-B9DCE4356BB9}
{3EAA45A9-735C-4AC7-A799-947B93EA449D} = {B3352C08-3CB4-4DD9-996F-B9DCE4356BB9}
@@ -748,6 +781,5 @@ Global
{CEFF8221-95D8-4F60-9D14-687019D0B2E8} = {7D16E1F9-0F9F-4A05-A162-A59C05E88B68}
{BD38E43B-947F-474B-8F6C-8BDAA9EE99A6} = {7D16E1F9-0F9F-4A05-A162-A59C05E88B68}
{D7DB55CF-58F8-4164-A6C9-AE7456E5BEF3} = {7D16E1F9-0F9F-4A05-A162-A59C05E88B68}
- {E2FD63DA-8478-4066-934C-DA82A852C83A} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
EndGlobalSection
EndGlobal
diff --git a/data/resources/image/BitmapResources/BitmapResources.res b/data/resources/image/BitmapResources/BitmapResources.res
index 86bac0c2b2..d9d7244be4 100644
--- a/data/resources/image/BitmapResources/BitmapResources.res
+++ b/data/resources/image/BitmapResources/BitmapResources.res
@@ -516,6 +516,7 @@ Boo.ProjectIcon = backendicons\boo\Boo.ProjectIcon.png
F#.ProjectIcon = backendicons\FSharp\F#.ProjectIcon.png
F#.FileIcon = backendicons\FSharp\F#.FileIcon.png
F#.Project.DOSProject = backendicons\FSharp\F#.Project.DOSProject.png
+F#.Project.Library = backendicons\FSharp\F#.Project.Library.png
F#.File.EmptyClass = backendicons\FSharp\F#.File.EmptyClass.png
diff --git a/data/resources/image/BitmapResources/backendicons/FSharp/F#.Project.Library.png b/data/resources/image/BitmapResources/backendicons/FSharp/F#.Project.Library.png
new file mode 100644
index 0000000000..2e62beac5e
Binary files /dev/null and b/data/resources/image/BitmapResources/backendicons/FSharp/F#.Project.Library.png differ
diff --git a/samples/Mono/Mono.AddIn.sln b/samples/Mono/Mono.AddIn.sln
index 3aa9354b99..33e588bab8 100644
--- a/samples/Mono/Mono.AddIn.sln
+++ b/samples/Mono/Mono.AddIn.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
-# SharpDevelop 4.0.0.5571
+# SharpDevelop 4.3
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.AddIn", "Mono.AddIn\Mono.AddIn.csproj", "{082DCD64-EE32-4151-A50F-E139CF754CC0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Build.Tasks", "Mono.Build.Tasks\Mono.Build.Tasks.csproj", "{BF6F814C-B89F-475E-ADC4-AEE81D10CB94}"
diff --git a/samples/Mono/Mono.AddIn/Configuration/AssemblyInfo.cs b/samples/Mono/Mono.AddIn/Configuration/AssemblyInfo.cs
index e1bbc45d8e..b612584da8 100644
--- a/samples/Mono/Mono.AddIn/Configuration/AssemblyInfo.cs
+++ b/samples/Mono/Mono.AddIn/Configuration/AssemblyInfo.cs
@@ -29,4 +29,4 @@ using System.Reflection;
// You can specify all values by your own or you can build default build and revision
// numbers with the '*' character (the default):
-[assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("2.0.*")]
diff --git a/samples/Mono/Mono.AddIn/Mono.addin b/samples/Mono/Mono.AddIn/Mono.addin
index 7b7da1a235..579f518084 100644
--- a/samples/Mono/Mono.AddIn/Mono.addin
+++ b/samples/Mono/Mono.AddIn/Mono.addin
@@ -52,6 +52,7 @@
+
diff --git a/samples/Mono/Mono.AddIn/Templates/CSharp.Console.Project.xpt b/samples/Mono/Mono.AddIn/Templates/CSharp.Console.Project.xpt
index ec241cfc13..c3b8fea15d 100644
--- a/samples/Mono/Mono.AddIn/Templates/CSharp.Console.Project.xpt
+++ b/samples/Mono/Mono.AddIn/Templates/CSharp.Console.Project.xpt
@@ -1,5 +1,6 @@
-
+
@@ -19,13 +20,15 @@
Exe
- v2.0
+ v4.0
+
+
diff --git a/samples/Mono/Mono.AddIn/Templates/CSharpGladeProject.xpt b/samples/Mono/Mono.AddIn/Templates/CSharpGladeProject.xpt
index 8363fc7edb..65ae08f006 100644
--- a/samples/Mono/Mono.AddIn/Templates/CSharpGladeProject.xpt
+++ b/samples/Mono/Mono.AddIn/Templates/CSharpGladeProject.xpt
@@ -1,7 +1,7 @@
+ lastModified = "28/06/2013">
@@ -20,7 +20,7 @@
WinExe
- v2.0
+ v4.0
diff --git a/samples/Mono/Mono.AddIn/Templates/CSharpGtkProject.xpt b/samples/Mono/Mono.AddIn/Templates/CSharpGtkProject.xpt
index f46c986954..5ee4d0811c 100644
--- a/samples/Mono/Mono.AddIn/Templates/CSharpGtkProject.xpt
+++ b/samples/Mono/Mono.AddIn/Templates/CSharpGtkProject.xpt
@@ -1,7 +1,7 @@
+ lastModified = "28/06/2013">
@@ -20,7 +20,7 @@
WinExe
- v2.0
+ v4.0
diff --git a/samples/Mono/Mono.AddIn/Templates/DefaultApp.config b/samples/Mono/Mono.AddIn/Templates/DefaultApp.config
index a2380b9c7c..d50c6cb012 100644
--- a/samples/Mono/Mono.AddIn/Templates/DefaultApp.config
+++ b/samples/Mono/Mono.AddIn/Templates/DefaultApp.config
@@ -3,7 +3,6 @@
-
diff --git a/samples/Mono/Mono.AddIn/Templates/VBNet.Console.Project.xpt b/samples/Mono/Mono.AddIn/Templates/VBNet.Console.Project.xpt
index 83ff12eda5..0c5c685502 100644
--- a/samples/Mono/Mono.AddIn/Templates/VBNet.Console.Project.xpt
+++ b/samples/Mono/Mono.AddIn/Templates/VBNet.Console.Project.xpt
@@ -1,7 +1,7 @@
+ lastModified = "28/06/2013">
@@ -21,7 +21,7 @@
Exe
- v2.0
+ v4.0
diff --git a/samples/Mono/Mono.AddIn/Templates/VBNetGtkProject.xpt b/samples/Mono/Mono.AddIn/Templates/VBNetGtkProject.xpt
index 621ae5a95e..0ba440159b 100644
--- a/samples/Mono/Mono.AddIn/Templates/VBNetGtkProject.xpt
+++ b/samples/Mono/Mono.AddIn/Templates/VBNetGtkProject.xpt
@@ -1,7 +1,7 @@
+ lastModified = "28/06/2013">
@@ -20,7 +20,7 @@
WinExe
- v2.0
+ v4.0
${StandardNamespace}.MainWindow
diff --git a/samples/Mono/Mono.Build.Tasks.Tests/Mono.Build.Tasks.Tests.csproj b/samples/Mono/Mono.Build.Tasks.Tests/Mono.Build.Tasks.Tests.csproj
index a07b9aa789..788861c75f 100644
--- a/samples/Mono/Mono.Build.Tasks.Tests/Mono.Build.Tasks.Tests.csproj
+++ b/samples/Mono/Mono.Build.Tasks.Tests/Mono.Build.Tasks.Tests.csproj
@@ -1,5 +1,5 @@
-
+
Library
ICSharpCode.Build.Tasks.Tests
@@ -17,7 +17,8 @@
4
false
bin\UnitTests
- v3.5
+ v4.0
+
False
diff --git a/samples/Mono/Mono.Build.Tasks/Dmcs.cs b/samples/Mono/Mono.Build.Tasks/Dmcs.cs
new file mode 100644
index 0000000000..3c32391f62
--- /dev/null
+++ b/samples/Mono/Mono.Build.Tasks/Dmcs.cs
@@ -0,0 +1,46 @@
+// SharpDevelop samples
+// Copyright (c) 2006, AlphaSierraPapa
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification, are
+// permitted provided that the following conditions are met:
+//
+// - Redistributions of source code must retain the above copyright notice, this list
+// of conditions and the following disclaimer.
+//
+// - Redistributions in binary form must reproduce the above copyright notice, this list
+// of conditions and the following disclaimer in the documentation and/or other materials
+// provided with the distribution.
+//
+// - Neither the name of the SharpDevelop team nor the names of its contributors may be used to
+// endorse or promote products derived from this software without specific prior written
+// permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &AS IS& AND ANY EXPRESS
+// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+using System;
+
+namespace Mono.Build.Tasks
+{
+ ///
+ /// MSBuild task for Mono's DMCS.
+ ///
+ public class Dmcs : MonoCSharpCompilerTask
+ {
+ protected override string ToolName {
+ get { return "Dmcs.exe"; }
+ }
+
+ protected override string GenerateFullPathToTool()
+ {
+ return MonoToolLocationHelper.GetPathToTool(ToolName);
+ }
+ }
+}
diff --git a/samples/Mono/Mono.Build.Tasks/GetMonoFrameworkPath.cs b/samples/Mono/Mono.Build.Tasks/GetMonoFrameworkPath.cs
index f2b8a83163..1a29a81082 100644
--- a/samples/Mono/Mono.Build.Tasks/GetMonoFrameworkPath.cs
+++ b/samples/Mono/Mono.Build.Tasks/GetMonoFrameworkPath.cs
@@ -38,6 +38,7 @@ namespace Mono.Build.Tasks
{
public const string TargetMonoFrameworkVersion11 = "v1.1";
public const string TargetMonoFrameworkVersion20 = "v2.0";
+ public const string TargetMonoFrameworkVersion40 = "v4.0";
string path = String.Empty;
TargetMonoFrameworkVersion targetFrameworkVersion = TargetMonoFrameworkVersion.VersionLatest;
@@ -76,16 +77,21 @@ namespace Mono.Build.Tasks
return TargetMonoFrameworkVersion11;
case TargetMonoFrameworkVersion.Version20:
return TargetMonoFrameworkVersion20;
+ case TargetMonoFrameworkVersion.Version40:
+ return TargetMonoFrameworkVersion40;
}
return null;
}
static TargetMonoFrameworkVersion ConvertToEnum(string frameworkVersion)
{
- if (frameworkVersion == TargetMonoFrameworkVersion11) {
- return TargetMonoFrameworkVersion.Version11;
- } else if (frameworkVersion == TargetMonoFrameworkVersion20) {
- return TargetMonoFrameworkVersion.Version20;
+ switch (frameworkVersion) {
+ case TargetMonoFrameworkVersion11:
+ return TargetMonoFrameworkVersion.Version11;
+ case TargetMonoFrameworkVersion20:
+ return TargetMonoFrameworkVersion.Version20;
+ case TargetMonoFrameworkVersion40:
+ return TargetMonoFrameworkVersion.Version40;
}
throw new ArgumentException("Unknown Mono target framework version: " + frameworkVersion);
}
diff --git a/samples/Mono/Mono.Build.Tasks/Mono.Build.CSharp.targets b/samples/Mono/Mono.Build.Tasks/Mono.Build.CSharp.targets
index 226c2ca8be..acb48b3b6e 100644
--- a/samples/Mono/Mono.Build.Tasks/Mono.Build.CSharp.targets
+++ b/samples/Mono/Mono.Build.Tasks/Mono.Build.CSharp.targets
@@ -78,4 +78,5 @@
+
diff --git a/samples/Mono/Mono.Build.Tasks/Mono.Build.Tasks.csproj b/samples/Mono/Mono.Build.Tasks/Mono.Build.Tasks.csproj
index 159aa0613e..f2621b7f30 100644
--- a/samples/Mono/Mono.Build.Tasks/Mono.Build.Tasks.csproj
+++ b/samples/Mono/Mono.Build.Tasks/Mono.Build.Tasks.csproj
@@ -1,5 +1,5 @@
-
-
+
+
{BF6F814C-B89F-475E-ADC4-AEE81D10CB94}
Debug
@@ -7,7 +7,8 @@
Library
Mono.Build.Tasks
Mono.Build.Tasks
- v3.5
+ v4.0
+
bin\Debug\
@@ -41,6 +42,7 @@
+
@@ -61,6 +63,9 @@
Always
+
+ Always
+
Always
diff --git a/samples/Mono/Mono.Build.Tasks/MonoToolLocationHelper.cs b/samples/Mono/Mono.Build.Tasks/MonoToolLocationHelper.cs
index cf9a572339..4363dd82db 100644
--- a/samples/Mono/Mono.Build.Tasks/MonoToolLocationHelper.cs
+++ b/samples/Mono/Mono.Build.Tasks/MonoToolLocationHelper.cs
@@ -45,6 +45,7 @@ namespace Mono.Build.Tasks
static string monoFrameworkAssemblyPath = null;
static string monoFrameworkVersion11Path = null;
static string monoFrameworkVersion20Path = null;
+ static string monoFrameworkVersion40Path = null;
static bool monoInstalled;
static bool checkedForMonoInstallation;
@@ -127,6 +128,8 @@ namespace Mono.Build.Tasks
return GetPathToMonoFrameworkVersion11();
case TargetMonoFrameworkVersion.Version20:
return GetPathToMonoFrameworkVersion20();
+ case TargetMonoFrameworkVersion.Version40:
+ return GetPathToMonoFrameworkVersion40();
}
return null;
}
@@ -177,6 +180,14 @@ namespace Mono.Build.Tasks
return monoFrameworkVersion20Path;
}
+ static string GetPathToMonoFrameworkVersion40()
+ {
+ if (monoFrameworkVersion40Path == null) {
+ monoFrameworkVersion40Path = GetPathToMonoFramework(@"mono\4.0");
+ }
+ return monoFrameworkVersion40Path;
+ }
+
static string GetPathToMonoFramework(string subFolder)
{
string monoFrameworkBaseFolder = GetBasePathToMonoFramework();
diff --git a/samples/Mono/Mono.Build.Tasks/SharpDevelop.Build.Mono.Dmcs.targets b/samples/Mono/Mono.Build.Tasks/SharpDevelop.Build.Mono.Dmcs.targets
new file mode 100644
index 0000000000..3354638db8
--- /dev/null
+++ b/samples/Mono/Mono.Build.Tasks/SharpDevelop.Build.Mono.Dmcs.targets
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+ $(MSBuildAllProjects);$(MonoBuildTasksPath)\SharpDevelop.Build.Mono.Dmcs.targets
+ .cs
+ C#
+
+
+
+
+
+ {CandidateAssemblyFiles};
+ $(ReferencePath);
+ {HintPathFromItem};
+ {TargetFrameworkDirectory};
+ {MonoGAC};
+ {RawFileName};
+ $(OutputPath)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ GetFrameworkPaths;
+ GetReferenceAssemblyPaths;
+ PrepareForBuild;
+ AddMonoAssemblySearchPaths
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/Mono/Mono.Build.Tasks/TargetMonoFrameworkVersion.cs b/samples/Mono/Mono.Build.Tasks/TargetMonoFrameworkVersion.cs
index baaf841ede..176d484bf5 100644
--- a/samples/Mono/Mono.Build.Tasks/TargetMonoFrameworkVersion.cs
+++ b/samples/Mono/Mono.Build.Tasks/TargetMonoFrameworkVersion.cs
@@ -33,6 +33,7 @@ namespace Mono.Build.Tasks
{
Version11 = 0,
Version20 = 1,
- VersionLatest = 1
+ Version40 = 2,
+ VersionLatest = 2
}
}
diff --git a/src/AddIns/BackendBindings/FSharpBinding/FSharpBinding.csproj b/src/AddIns/BackendBindings/FSharpBinding/FSharpBinding.csproj
index 00859b39e3..4ea73552eb 100644
--- a/src/AddIns/BackendBindings/FSharpBinding/FSharpBinding.csproj
+++ b/src/AddIns/BackendBindings/FSharpBinding/FSharpBinding.csproj
@@ -72,12 +72,19 @@
Always
-
+
Never
-
+
+ Never
+
+
+ Never
+
+
Never
+
diff --git a/src/AddIns/BackendBindings/FSharpBinding/FSharpInteractive.cs b/src/AddIns/BackendBindings/FSharpBinding/FSharpInteractive.cs
index e176882d3e..5c4b6fca27 100644
--- a/src/AddIns/BackendBindings/FSharpBinding/FSharpInteractive.cs
+++ b/src/AddIns/BackendBindings/FSharpBinding/FSharpInteractive.cs
@@ -46,9 +46,8 @@ namespace FSharpBinding
fsiProcess.StartInfo.FileName = Path.Combine(path, "fsi.exe");
foundCompiler = true;
} else {
- string programFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
- path = Path.Combine(programFiles, @"Microsoft F#\v4.0\Fsi.exe");
- if (File.Exists(path)) {
+ path = FindFSharpInteractiveInProgramFilesFolder();
+ if (path != null) {
fsiProcess.StartInfo.FileName = path;
foundCompiler = true;
} else {
@@ -91,6 +90,22 @@ namespace FSharpBinding
}
}
+ string FindFSharpInteractiveInProgramFilesFolder()
+ {
+ var fileNames = new string [] {
+ @"Microsoft SDKs\F#\3.0\Framework\v4.0\Fsi.exe",
+ @"Microsoft F#\v4.0\Fsi.exe"
+ };
+ return FindFirstMatchingFileInProgramFiles(fileNames);
+ }
+
+ string FindFirstMatchingFileInProgramFiles(string[] fileNames)
+ {
+ string programFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
+ return fileNames.Select(fileName => Path.Combine(programFiles, fileName))
+ .FirstOrDefault(fullPath => File.Exists(fullPath));
+ }
+
void StartFSharp()
{
fsiProcess.Start();
diff --git a/src/AddIns/BackendBindings/FSharpBinding/FSharpProject.cs b/src/AddIns/BackendBindings/FSharpBinding/FSharpProject.cs
index c8c65bb3bb..99a3fb2df1 100644
--- a/src/AddIns/BackendBindings/FSharpBinding/FSharpProject.cs
+++ b/src/AddIns/BackendBindings/FSharpBinding/FSharpProject.cs
@@ -21,13 +21,6 @@ namespace FSharpBinding
public FSharpProject(ProjectCreateInformation info) : base(info)
{
- try {
- base.AddImport(@"$(MSBuildExtensionsPath32)\..\Microsoft F#\v4.0\Microsoft.FSharp.Targets", null);
- base.ReevaluateIfNecessary(); // provoke exception if import is invalid
- } catch (InvalidProjectFileException ex) {
- Dispose();
- throw new ProjectLoadException("Please ensure that the F# compiler is installed on your computer.\n\n" + ex.Message, ex);
- }
}
public override string Language {
diff --git a/src/AddIns/BackendBindings/FSharpBinding/Templates/ConsoleProject.xpt b/src/AddIns/BackendBindings/FSharpBinding/Templates/FSharp2ConsoleProject.xpt
similarity index 62%
rename from src/AddIns/BackendBindings/FSharpBinding/Templates/ConsoleProject.xpt
rename to src/AddIns/BackendBindings/FSharpBinding/Templates/FSharp2ConsoleProject.xpt
index 4753585ff4..4235f0678b 100644
--- a/src/AddIns/BackendBindings/FSharpBinding/Templates/ConsoleProject.xpt
+++ b/src/AddIns/BackendBindings/FSharpBinding/Templates/FSharp2ConsoleProject.xpt
@@ -5,7 +5,7 @@
- ${res:Templates.Project.ConsoleProject.Name}
+ F# 2.0 ${res:Templates.Project.ConsoleProject.Name}
F#
F#.Project.DOSProject
${res:Templates.Project.ConsoleProject.Description}
@@ -18,6 +18,20 @@
+
+
+
+
+
+
+
+ Exe
+
+
+
+
+
+
+
+
+
+
+ F# 2.0 ${res:Templates.Project.ClassLibrary.Name}
+ F#
+ F#.Project.Library
+ ${res:Templates.Project.ClassLibrary.Description}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Library
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/AddIns/BackendBindings/FSharpBinding/Templates/FSharp3ConsoleProject.xpt b/src/AddIns/BackendBindings/FSharpBinding/Templates/FSharp3ConsoleProject.xpt
new file mode 100644
index 0000000000..46449114c6
--- /dev/null
+++ b/src/AddIns/BackendBindings/FSharpBinding/Templates/FSharp3ConsoleProject.xpt
@@ -0,0 +1,44 @@
+
+
+
+
+
+ F# 3.0 ${res:Templates.Project.ConsoleProject.Name}
+ F#
+ F#.Project.DOSProject
+ ${res:Templates.Project.ConsoleProject.Description}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+ Exe
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/AddIns/BackendBindings/FSharpBinding/Templates/FSharp3LibraryProject.xpt b/src/AddIns/BackendBindings/FSharpBinding/Templates/FSharp3LibraryProject.xpt
new file mode 100644
index 0000000000..470d920ed2
--- /dev/null
+++ b/src/AddIns/BackendBindings/FSharpBinding/Templates/FSharp3LibraryProject.xpt
@@ -0,0 +1,47 @@
+
+
+
+
+
+ F# 3.0 ${res:Templates.Project.ClassLibrary.Name}
+ F#
+ F#.Project.Library
+ ${res:Templates.Project.ClassLibrary.Description}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+ Library
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/AddIns/BackendBindings/WixBinding/Project/Src/Project/WixProject.cs b/src/AddIns/BackendBindings/WixBinding/Project/Src/Project/WixProject.cs
index 55a163a150..433c7a59c3 100644
--- a/src/AddIns/BackendBindings/WixBinding/Project/Src/Project/WixProject.cs
+++ b/src/AddIns/BackendBindings/WixBinding/Project/Src/Project/WixProject.cs
@@ -7,11 +7,12 @@ using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
-
+using ICSharpCode.Core;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
+using Microsoft.Build.Exceptions;
namespace ICSharpCode.WixBinding
{
@@ -42,6 +43,17 @@ namespace ICSharpCode.WixBinding
SetProperty("OutputType", "Package");
AddWixTargetsPathProperties();
AddImport(DefaultTargetsFile, null);
+ CheckWixIsInstalled();
+ }
+
+ void CheckWixIsInstalled()
+ {
+ try {
+ ReevaluateIfNecessary();
+ } catch (InvalidProjectFileException ex) {
+ LoggingService.Error(ex);
+ throw new InvalidProjectFileException(StringParser.Parse("${res:ICSharpCode.WixBinding.WixNotInstalled}"));
+ }
}
void AddWixTargetsPathProperties()
diff --git a/src/AddIns/BackendBindings/WixBinding/Project/WixBinding.csproj b/src/AddIns/BackendBindings/WixBinding/Project/WixBinding.csproj
index 672b978a21..348ec9064b 100644
--- a/src/AddIns/BackendBindings/WixBinding/Project/WixBinding.csproj
+++ b/src/AddIns/BackendBindings/WixBinding/Project/WixBinding.csproj
@@ -48,6 +48,7 @@
obj\
+
3.0
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
index fe723c5cf6..2521a09d71 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
@@ -234,7 +234,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
codeEditorView.TextArea.Caret.PositionChanged += TextAreaCaretPositionChanged;
codeEditorView.TextArea.DefaultInputHandler.CommandBindings.Add(
new CommandBinding(CustomCommands.CtrlSpaceCompletion, OnCodeCompletion));
- codeEditorView.TextArea.DefaultInputHandler.NestedInputHandlers.Add(new SearchInputHandler(codeEditorView.TextArea));
+ SearchPanel.Install(codeEditorView.TextArea);
textView.BackgroundRenderers.Add(textMarkerService);
textView.LineTransformers.Add(textMarkerService);
diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeNuGetCorePackageManager.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeNuGetCorePackageManager.cs
index 4c30f42d57..40fec605c6 100644
--- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeNuGetCorePackageManager.cs
+++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeNuGetCorePackageManager.cs
@@ -12,6 +12,7 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes
{
}
+ #pragma warning disable 0067
public event EventHandler PackageInstalled;
public event EventHandler PackageInstalling;
@@ -19,6 +20,7 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes
public event EventHandler PackageUninstalled;
public event EventHandler PackageUninstalling;
+ #pragma warning restore 0067
public NuGet.IFileSystem FileSystem
{
diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs
index c1dae740da..5557c651d7 100644
--- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs
+++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs
@@ -170,5 +170,17 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes
{
return null;
}
+
+ public System.Collections.Generic.ICollection PackageAssemblyReferences {
+ get {
+ throw new NotImplementedException();
+ }
+ }
+
+ public Version MinClientVersion {
+ get {
+ throw new NotImplementedException();
+ }
+ }
}
}
diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/InstalledAddInsViewModelTests.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/InstalledAddInsViewModelTests.cs
index 39fdeefaaa..1321b65993 100644
--- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/InstalledAddInsViewModelTests.cs
+++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/InstalledAddInsViewModelTests.cs
@@ -24,7 +24,6 @@ namespace ICSharpCode.AddInManager2.Tests
AddIn _addIn1;
AddIn _addIn1_new;
AddIn _addIn2;
- AddIn _addIn2_new;
AddIn _addIn_noVersion;
public InstalledAddInsViewModelTests()
diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/Model/NuGetPackageManager.cs b/src/AddIns/Misc/AddInManager2/Project/Src/Model/NuGetPackageManager.cs
index 509ac06461..4bff470333 100644
--- a/src/AddIns/Misc/AddInManager2/Project/Src/Model/NuGetPackageManager.cs
+++ b/src/AddIns/Misc/AddInManager2/Project/Src/Model/NuGetPackageManager.cs
@@ -33,6 +33,11 @@ namespace ICSharpCode.AddInManager2.Model
{
_events.OnPackageMessageLogged(new PackageMessageLoggedEventArgs(level, message, args));
}
+
+ public FileConflictResolution ResolveFileConflict(string message)
+ {
+ return FileConflictResolution.IgnoreAll;
+ }
}
private NuGetPackageManagerImplementation _packageManager = null;
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs
index ee4af19032..a94074fcc4 100644
--- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs
@@ -44,10 +44,20 @@ namespace ICSharpCode.PackageManagement.Cmdlets
[Parameter, Alias("Prerelease")]
public SwitchParameter IncludePrerelease { get; set; }
+ [Parameter]
+ public FileConflictAction FileConflictAction { get; set; }
+
protected override void ProcessRecord()
{
ThrowErrorIfProjectNotOpen();
- InstallPackage();
+ using (IConsoleHostFileConflictResolver resolver = CreateFileConflictResolver()) {
+ InstallPackage();
+ }
+ }
+
+ IConsoleHostFileConflictResolver CreateFileConflictResolver()
+ {
+ return ConsoleHost.CreateFileConflictResolver(FileConflictAction);
}
void InstallPackage()
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InvokeProcessPackageActionsCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InvokeProcessPackageActionsCmdlet.cs
index 6f146edce5..25e5eebe08 100644
--- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InvokeProcessPackageActionsCmdlet.cs
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InvokeProcessPackageActionsCmdlet.cs
@@ -36,18 +36,18 @@ namespace ICSharpCode.PackageManagement.Cmdlets
void ExecutePackageActions()
{
- ProcessPackageAction action = null;
+ IPackageAction action = null;
while (GetNextAction(out action)) {
Execute(action);
}
}
- bool GetNextAction(out ProcessPackageAction action)
+ bool GetNextAction(out IPackageAction action)
{
return actionsToRun.GetNextAction(out action);
}
- void Execute(ProcessPackageAction action)
+ void Execute(IPackageAction action)
{
action.PackageScriptRunner = this;
action.Execute();
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs
index 70004b7bd8..f86a11bc60 100644
--- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs
@@ -50,10 +50,25 @@ namespace ICSharpCode.PackageManagement.Cmdlets
[Parameter, Alias("Prerelease")]
public SwitchParameter IncludePrerelease { get; set; }
-
+
+ [Parameter]
+ public FileConflictAction FileConflictAction { get; set; }
+
protected override void ProcessRecord()
{
ThrowErrorIfProjectNotOpen();
+ using (IConsoleHostFileConflictResolver resolver = CreateFileConflictResolver()) {
+ RunUpdate();
+ }
+ }
+
+ IConsoleHostFileConflictResolver CreateFileConflictResolver()
+ {
+ return ConsoleHost.CreateFileConflictResolver(FileConflictAction);
+ }
+
+ void RunUpdate()
+ {
if (HasPackageId()) {
if (HasProjectName()) {
UpdatePackageInSingleProject();
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs
index a2218d2008..e6a5ee6a72 100644
--- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs
@@ -19,7 +19,6 @@ namespace PackageManagement.Cmdlets.Tests
TestableInstallPackageCmdlet cmdlet;
FakeCmdletTerminatingError fakeTerminatingError;
FakePackageManagementProject fakeProject;
- FakeInstallPackageAction fakeInstallPackageAction;
void CreateCmdletWithoutActiveProject()
{
@@ -27,9 +26,8 @@ namespace PackageManagement.Cmdlets.Tests
fakeTerminatingError = cmdlet.FakeCmdletTerminatingError;
fakeConsoleHost = cmdlet.FakePackageManagementConsoleHost;
fakeProject = fakeConsoleHost.FakeProject;
- fakeInstallPackageAction = fakeProject.FakeInstallPackageAction;
}
-
+
void CreateCmdletWithActivePackageSourceAndProject()
{
CreateCmdletWithoutActiveProject();
@@ -90,8 +88,7 @@ namespace PackageManagement.Cmdlets.Tests
SetIdParameter("Test");
RunCmdlet();
- var actualPackageId = fakeInstallPackageAction.PackageId;
-
+ string actualPackageId = fakeProject.LastInstallPackageCreated.PackageId;
Assert.AreEqual("Test", actualPackageId);
}
@@ -104,8 +101,7 @@ namespace PackageManagement.Cmdlets.Tests
EnableIgnoreDependenciesParameter();
RunCmdlet();
- bool result = fakeInstallPackageAction.IgnoreDependencies;
-
+ bool result = fakeProject.LastInstallPackageCreated.IgnoreDependencies;
Assert.IsTrue(result);
}
@@ -117,8 +113,7 @@ namespace PackageManagement.Cmdlets.Tests
SetIdParameter("Test");
RunCmdlet();
- bool result = fakeInstallPackageAction.IgnoreDependencies;
-
+ bool result = fakeProject.LastInstallPackageCreated.IgnoreDependencies;
Assert.IsFalse(result);
}
@@ -131,8 +126,7 @@ namespace PackageManagement.Cmdlets.Tests
EnablePrereleaseParameter();
RunCmdlet();
- bool result = fakeInstallPackageAction.AllowPrereleaseVersions;
-
+ bool result = fakeProject.LastInstallPackageCreated.AllowPrereleaseVersions;
Assert.IsTrue(result);
}
@@ -144,8 +138,7 @@ namespace PackageManagement.Cmdlets.Tests
SetIdParameter("Test");
RunCmdlet();
- bool result = fakeInstallPackageAction.AllowPrereleaseVersions;
-
+ bool result = fakeProject.LastInstallPackageCreated.AllowPrereleaseVersions;
Assert.IsFalse(result);
}
@@ -158,8 +151,8 @@ namespace PackageManagement.Cmdlets.Tests
SetSourceParameter("http://sharpdevelop.net/packages");
RunCmdlet();
- var expected = "http://sharpdevelop.net/packages";
- var actual = fakeConsoleHost.PackageSourcePassedToGetProject;
+ string expected = "http://sharpdevelop.net/packages";
+ string actual = fakeConsoleHost.PackageSourcePassedToGetProject;
Assert.AreEqual(expected, actual);
}
@@ -174,8 +167,7 @@ namespace PackageManagement.Cmdlets.Tests
SetVersionParameter(version);
RunCmdlet();
- SemanticVersion actualVersion = fakeInstallPackageAction.PackageVersion;
-
+ SemanticVersion actualVersion = fakeProject.LastInstallPackageCreated.PackageVersion;
Assert.AreEqual(version, actualVersion);
}
@@ -187,8 +179,7 @@ namespace PackageManagement.Cmdlets.Tests
SetIdParameter("Test");
RunCmdlet();
- var actualVersion = fakeInstallPackageAction.PackageVersion;
-
+ SemanticVersion actualVersion = fakeProject.LastInstallPackageCreated.PackageVersion;
Assert.IsNull(actualVersion);
}
@@ -230,8 +221,7 @@ namespace PackageManagement.Cmdlets.Tests
SetIdParameter("Test");
RunCmdlet();
- bool result = fakeInstallPackageAction.IsExecuteCalled;
-
+ bool result = fakeProject.LastInstallPackageCreated.IsExecuteCalled;
Assert.IsTrue(result);
}
@@ -244,9 +234,62 @@ namespace PackageManagement.Cmdlets.Tests
SetIdParameter("Test");
RunCmdlet();
- IPackageScriptRunner scriptRunner = fakeInstallPackageAction.PackageScriptRunner;
-
+ IPackageScriptRunner scriptRunner = fakeProject.LastInstallPackageCreated.PackageScriptRunner;
Assert.AreEqual(cmdlet, scriptRunner);
}
+
+ [Test]
+ public void ProcessRecord_FileConflictActionIsOverwrite_FileConflictResolverCreatedWithOverwriteAction()
+ {
+ CreateCmdletWithoutActiveProject();
+ AddDefaultProjectToConsoleHost();
+ AddPackageSourceToConsoleHost();
+ SetIdParameter("Test");
+ cmdlet.FileConflictAction = FileConflictAction.Overwrite;
+
+ RunCmdlet();
+
+ Assert.AreEqual(FileConflictAction.Overwrite, fakeConsoleHost.LastFileConflictActionUsedWhenCreatingResolver);
+ }
+
+ [Test]
+ public void ProcessRecord_FileConflictActionIsIgnore_FileConflictResolverCreatedWithIgnoreAction()
+ {
+ CreateCmdletWithoutActiveProject();
+ AddDefaultProjectToConsoleHost();
+ AddPackageSourceToConsoleHost();
+ SetIdParameter("Test");
+ cmdlet.FileConflictAction = FileConflictAction.Ignore;
+
+ RunCmdlet();
+
+ Assert.AreEqual(FileConflictAction.Ignore, fakeConsoleHost.LastFileConflictActionUsedWhenCreatingResolver);
+ }
+
+ [Test]
+ public void ProcessRecord_FileConflictActionNotSet_FileConflictResolverCreatedWithNoneFileConflictAction()
+ {
+ CreateCmdletWithoutActiveProject();
+ AddDefaultProjectToConsoleHost();
+ AddPackageSourceToConsoleHost();
+ SetIdParameter("Test");
+
+ RunCmdlet();
+
+ Assert.AreEqual(FileConflictAction.None, fakeConsoleHost.LastFileConflictActionUsedWhenCreatingResolver);
+ }
+
+ [Test]
+ public void ProcessRecord_PackageIdSpecified_FileConflictResolverIsDisposed()
+ {
+ CreateCmdletWithoutActiveProject();
+ AddDefaultProjectToConsoleHost();
+ AddPackageSourceToConsoleHost();
+ SetIdParameter("Test");
+
+ RunCmdlet();
+
+ fakeConsoleHost.AssertFileConflictResolverIsDisposed();
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs
index d5134662cd..3bc94ee315 100644
--- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs
@@ -715,5 +715,59 @@ namespace PackageManagement.Cmdlets.Tests
Assert.AreEqual(expectedVersion, packageReference.Version);
}
+
+ [Test]
+ public void ProcessRecord_FileConflictActionIsOverwrite_FileConflictResolverCreatedWithOverwriteAction()
+ {
+ CreateCmdletWithoutActiveProject();
+ AddDefaultProjectToConsoleHost();
+ AddPackageSourceToConsoleHost();
+ SetIdParameter("Test");
+ cmdlet.FileConflictAction = FileConflictAction.Overwrite;
+
+ RunCmdlet();
+
+ Assert.AreEqual(FileConflictAction.Overwrite, fakeConsoleHost.LastFileConflictActionUsedWhenCreatingResolver);
+ }
+
+ [Test]
+ public void ProcessRecord_FileConflictActionIsIgnore_FileConflictResolverCreatedWithIgnoreAction()
+ {
+ CreateCmdletWithoutActiveProject();
+ AddDefaultProjectToConsoleHost();
+ AddPackageSourceToConsoleHost();
+ SetIdParameter("Test");
+ cmdlet.FileConflictAction = FileConflictAction.Ignore;
+
+ RunCmdlet();
+
+ Assert.AreEqual(FileConflictAction.Ignore, fakeConsoleHost.LastFileConflictActionUsedWhenCreatingResolver);
+ }
+
+ [Test]
+ public void ProcessRecord_FileConflictActionNotSet_FileConflictResolverCreatedWithNoneFileConflictAction()
+ {
+ CreateCmdletWithoutActiveProject();
+ AddDefaultProjectToConsoleHost();
+ AddPackageSourceToConsoleHost();
+ SetIdParameter("Test");
+
+ RunCmdlet();
+
+ Assert.AreEqual(FileConflictAction.None, fakeConsoleHost.LastFileConflictActionUsedWhenCreatingResolver);
+ }
+
+ [Test]
+ public void ProcessRecord_PackageIdSpecified_FileConflictResolverIsDisposed()
+ {
+ CreateCmdletWithoutActiveProject();
+ AddDefaultProjectToConsoleHost();
+ AddPackageSourceToConsoleHost();
+ SetIdParameter("Test");
+
+ RunCmdlet();
+
+ fakeConsoleHost.AssertFileConflictResolverIsDisposed();
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Packages/AvalonEdit.Sample/AvalonEdit.Sample.nuspec b/src/AddIns/Misc/PackageManagement/Packages/AvalonEdit.Sample/AvalonEdit.Sample.nuspec
index bfd6b69112..dbc3059416 100644
--- a/src/AddIns/Misc/PackageManagement/Packages/AvalonEdit.Sample/AvalonEdit.Sample.nuspec
+++ b/src/AddIns/Misc/PackageManagement/Packages/AvalonEdit.Sample/AvalonEdit.Sample.nuspec
@@ -2,7 +2,7 @@
AvalonEdit.Sample
- 4.3.0.9390
+ 4.3.1.9430
Daniel Grunwald
SharpDevelop
http://www.opensource.org/licenses/mit-license.php
@@ -16,7 +16,7 @@ StartupUri="/Samples/AvalonEdit/Window1.xaml"
Sample code for AvalonEdit the WPF-based text editor used in SharpDevelop 4.0.
en-US
-
+
diff --git a/src/AddIns/Misc/PackageManagement/Packages/AvalonEdit/AvalonEdit.nuspec b/src/AddIns/Misc/PackageManagement/Packages/AvalonEdit/AvalonEdit.nuspec
index 9ab173019f..81a99650a1 100644
--- a/src/AddIns/Misc/PackageManagement/Packages/AvalonEdit/AvalonEdit.nuspec
+++ b/src/AddIns/Misc/PackageManagement/Packages/AvalonEdit/AvalonEdit.nuspec
@@ -2,7 +2,7 @@
AvalonEdit
- 4.3.0.9390
+ 4.3.1.9430
Daniel Grunwald
SharpDevelop
http://www.opensource.org/licenses/lgpl-2.1.php
@@ -11,7 +11,8 @@
true
AvalonEdit is the WPF-based text editor used in SharpDevelop. There are two builds of AvalonEdit included in this package. One that targets .NET 4.0 and one that targets .NET 3.5.
AvalonEdit is the WPF-based text editor used in SharpDevelop
- AvalonEdit 4.3 adds support for input method editors (IME); and fixes a major bug that sometimes caused "InvalidOperationException: Trying to build visual line from collapsed line" when updating existing foldings.
+ AvalonEdit 4.3 adds support for input method editors (IME); and fixes a major bug that sometimes caused "InvalidOperationException: Trying to build visual line from collapsed line" when updating existing foldings.
+AvalonEdit 4.3.1 fixes a bug in IME support - we did not properly re-enable the IME if it was disabled by another WPF control.
en-US
WPF Text Editor SharpDevelop AvalonEdit
diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
index fe7f0472dd..73ea584b36 100644
--- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
+++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
@@ -42,6 +42,9 @@
+
+ ..\RequiredLibraries\Microsoft.Web.XmlTransform.dll
+
..\RequiredLibraries\NuGet.Console.Types.dll
@@ -140,10 +143,20 @@
+
+
+ FileConflictView.xaml
+ Code
+
+
+
+
+
+
@@ -215,7 +228,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -468,6 +499,7 @@
+
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/AvailablePackagesViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/AvailablePackagesViewModel.cs
index 7a144063b5..14dcc62058 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/AvailablePackagesViewModel.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/AvailablePackagesViewModel.cs
@@ -22,6 +22,7 @@ namespace ICSharpCode.PackageManagement
{
IsSearchable = true;
ShowPackageSources = true;
+ ShowPrerelease = true;
}
protected override void UpdateRepositoryBeforeReadPackagesTaskStarts()
@@ -38,14 +39,12 @@ namespace ICSharpCode.PackageManagement
if (repository == null) {
throw new ApplicationException(errorMessage);
}
+ if (IncludePrerelease) {
+ return repository.GetPackages();
+ }
return repository.GetPackages().Where(package => package.IsLatestVersion);
}
- public IQueryable CallGetPackagesFromPackageSource()
- {
- return GetPackagesFromPackageSource();
- }
-
///
/// Order packages by most downloaded first.
///
@@ -56,6 +55,10 @@ namespace ICSharpCode.PackageManagement
protected override IEnumerable GetFilteredPackagesBeforePagingResults(IQueryable allPackages)
{
+ if (IncludePrerelease) {
+ return base.GetFilteredPackagesBeforePagingResults(allPackages)
+ .DistinctLast(PackageEqualityComparer.Id);
+ }
return base.GetFilteredPackagesBeforePagingResults(allPackages)
.Where(package => package.IsReleaseVersion())
.DistinctLast(PackageEqualityComparer.Id);
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ConsolePackageActionRunner.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ConsolePackageActionRunner.cs
index a06a01908f..8a8adff547 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/ConsolePackageActionRunner.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/ConsolePackageActionRunner.cs
@@ -30,16 +30,17 @@ namespace ICSharpCode.PackageManagement
this.workbench = workbench;
}
- public void Run(ProcessPackageAction action)
+ public void Run(IPackageAction action)
{
- var actions = new List();
+ var actions = new List();
actions.Add(action);
Run(actions);
}
- public void Run(IEnumerable actions)
+ public void Run(IEnumerable actions)
{
CreateConsolePadIfConsoleHostIsNotRunning();
+ ShowConsolePad();
AddNewActionsToRun(actions);
InvokeProcessPackageActionsCmdlet();
}
@@ -51,14 +52,19 @@ namespace ICSharpCode.PackageManagement
}
}
- void AddNewActionsToRun(IEnumerable actions)
+ void ShowConsolePad()
{
- foreach (ProcessPackageAction action in actions) {
+ workbench.ShowConsolePad();
+ }
+
+ void AddNewActionsToRun(IEnumerable actions)
+ {
+ foreach (IPackageAction action in actions) {
AddNewActionToRun(action);
}
}
- void AddNewActionToRun(ProcessPackageAction action)
+ void AddNewActionToRun(IPackageAction action)
{
packageActionsToRun.AddAction(action);
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeFileSystem.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeFileSystem.cs
index 7a8e3405ee..c928af8347 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeFileSystem.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeFileSystem.cs
@@ -94,5 +94,20 @@ namespace ICSharpCode.PackageManagement.Design
{
throw new NotImplementedException();
}
+
+ public void AddFile(string path, Action writeToStream)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void MakeFileWritable(string path)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Stream CreateFile(string path)
+ {
+ throw new NotImplementedException();
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeInstallPackageAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeInstallPackageAction.cs
index a6154434b0..544aa55fae 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeInstallPackageAction.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeInstallPackageAction.cs
@@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
+using ICSharpCode.PackageManagement.Scripting;
namespace ICSharpCode.PackageManagement.Design
{
@@ -27,5 +28,16 @@ namespace ICSharpCode.PackageManagement.Design
protected override void BeforeExecute()
{
}
+
+ protected override RunPackageScriptsAction CreateRunPackageScriptsAction(
+ IPackageScriptRunner scriptRunner,
+ IPackageManagementProject project)
+ {
+ return new RunPackageScriptsAction(
+ project,
+ scriptRunner,
+ new PackageScriptFactory(),
+ new NullGlobalMSBuildProjectCollection());
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs
index 6a69241a0d..51b7f690dd 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs
@@ -178,5 +178,22 @@ namespace ICSharpCode.PackageManagement.Design
{
return SupportedFrameworks;
}
+
+ List FakePackageAssemblyReferences =
+ new List();
+
+ public ICollection PackageAssemblyReferences {
+ get { return FakePackageAssemblyReferences; }
+ }
+
+ public void AddPackageReferences(params string[] names)
+ {
+ var frameworkName = new FrameworkName(".NET Framework, Version=4.0");
+ var packageReferenceSet = new PackageReferenceSet(frameworkName, names);
+ FakePackageAssemblyReferences.Add(packageReferenceSet);
+ }
+
+ public Version MinClientVersion { get; set; }
+ public Uri GalleryUrl { get; set; }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs
index 3fe8611b14..80dd78f3ec 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs
@@ -26,7 +26,7 @@ namespace ICSharpCode.PackageManagement.Design
this.Name = name;
}
- public FakeInstallPackageAction FakeInstallPackageAction;
+ private FakeInstallPackageAction FakeInstallPackageAction;
public FakeUninstallPackageAction FakeUninstallPackageAction;
public FakeUpdatePackageAction FirstFakeUpdatePackageActionCreated {
@@ -101,7 +101,7 @@ namespace ICSharpCode.PackageManagement.Design
var package = new FakePackage("MyPackage");
var operation = new FakePackageOperation(package, PackageAction.Uninstall);
FakeInstallOperations.Add(operation);
- return operation;
+ return operation;
}
public FakePackageRepository FakeSourceRepository = new FakePackageRepository();
@@ -136,16 +136,19 @@ namespace ICSharpCode.PackageManagement.Design
IsUpdatePackageCalled = true;
}
+ public FakeInstallPackageAction LastInstallPackageCreated;
+
public virtual InstallPackageAction CreateInstallPackageAction()
{
- return FakeInstallPackageAction;
+ LastInstallPackageCreated = new FakeInstallPackageAction(this);
+ return LastInstallPackageCreated;
}
public virtual UninstallPackageAction CreateUninstallPackageAction()
{
return FakeUninstallPackageAction;
}
-
+
public UpdatePackageAction CreateUpdatePackageAction()
{
var action = new FakeUpdatePackageAction(this);
@@ -213,5 +216,48 @@ namespace ICSharpCode.PackageManagement.Design
{
FakeSourceRepository.AddFakePackage(packageId);
}
+
+ public void UpdatePackages(UpdatePackagesAction action)
+ {
+ }
+
+ public List UpdatePackagesActionsCreated =
+ new List();
+
+ public UpdatePackagesAction CreateUpdatePackagesAction()
+ {
+ var action = new UpdatePackagesAction(this, null);
+ UpdatePackagesActionsCreated.Add(action);
+ return action;
+ }
+
+ public UpdatePackagesAction UpdatePackagesActionPassedToGetUpdatePackagesOperations;
+ public IUpdatePackageSettings SettingsPassedToGetUpdatePackagesOperations;
+ public List PackagesOnUpdatePackagesActionPassedToGetUpdatePackagesOperations;
+ public List PackageOperationsToReturnFromGetUpdatePackagesOperations =
+ new List();
+
+ public IEnumerable GetUpdatePackagesOperations(
+ IEnumerable packages,
+ IUpdatePackageSettings settings)
+ {
+ SettingsPassedToGetUpdatePackagesOperations = settings;
+ PackagesOnUpdatePackagesActionPassedToGetUpdatePackagesOperations = packages.ToList();
+ return PackageOperationsToReturnFromGetUpdatePackagesOperations;
+ }
+
+ public void RunPackageOperations(IEnumerable expectedOperations)
+ {
+ }
+
+ public bool HasOlderPackageInstalled(IPackage package)
+ {
+ return false;
+ }
+
+ public void UpdatePackageReference(IPackage package, IUpdatePackageSettings settings)
+ {
+ throw new NotImplementedException();
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManager.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManager.cs
index 541d79977e..e4e688853e 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManager.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManager.cs
@@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
+using System.Linq;
using ICSharpCode.PackageManagement;
using NuGet;
@@ -22,6 +23,8 @@ namespace ICSharpCode.PackageManagement.Design
public IPackage PackagePassedToUninstallPackage;
+ public UpdatePackagesAction UpdatePackagesActionsPassedToUpdatePackages;
+
#pragma warning disable 67
public event EventHandler PackageInstalled;
public event EventHandler PackageInstalling;
@@ -158,5 +161,37 @@ namespace ICSharpCode.PackageManagement.Design
{
throw new NotImplementedException();
}
+
+ public void UpdatePackages(UpdatePackagesAction updateAction)
+ {
+ UpdatePackagesActionsPassedToUpdatePackages = updateAction;
+ }
+
+ public List PackageOperationsToReturnFromGetUpdatePackageOperations = new List();
+ public IUpdatePackageSettings SettingsPassedToGetUpdatePackageOperations;
+ public IEnumerable PackagesPassedToGetUpdatePackageOperations;
+
+ public IEnumerable GetUpdatePackageOperations(IEnumerable packages, IUpdatePackageSettings settings)
+ {
+ SettingsPassedToGetUpdatePackageOperations = settings;
+ PackagesPassedToGetUpdatePackageOperations = packages;
+ return PackageOperationsToReturnFromGetUpdatePackageOperations;
+ }
+
+ public List PackageOperationsPassedToRunPackageOperations;
+
+ public void RunPackageOperations(IEnumerable operations)
+ {
+ PackageOperationsPassedToRunPackageOperations = operations.ToList();
+ }
+
+ public IPackage PackagePassedToUpdatePackageReference;
+ public IUpdatePackageSettings SettingsPassedToUpdatePackageReference;
+
+ public void UpdatePackageReference(IPackage package, IUpdatePackageSettings settings)
+ {
+ PackagePassedToUpdatePackageReference = package;
+ SettingsPassedToUpdatePackageReference = settings;
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectManager.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectManager.cs
index 96ebbf52e9..b35be1821d 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectManager.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectManager.cs
@@ -116,5 +116,14 @@ namespace ICSharpCode.PackageManagement.Design
{
throw new NotImplementedException();
}
+
+ public IPackage PackagePassedToHasOlderPackageInstalled;
+ public bool HasOlderPackageInstalledReturnValue;
+
+ public bool HasOlderPackageInstalled(IPackage package)
+ {
+ PackagePassedToHasOlderPackageInstalled = package;
+ return HasOlderPackageInstalledReturnValue;
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectSystem.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectSystem.cs
index 6b82ffbbd3..7d281a91b7 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectSystem.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectSystem.cs
@@ -56,5 +56,20 @@ namespace ICSharpCode.PackageManagement.Design
}
public bool IsBindingRedirectSupported { get; set; }
+
+ public void AddImport(string targetPath, ProjectImportLocation location)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void RemoveImport(string targetPath)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool FileExistsInProject(string path)
+ {
+ throw new NotImplementedException();
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeRegisteredPackageRepositories.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeRegisteredPackageRepositories.cs
index 25ca9d0005..910d32c29e 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeRegisteredPackageRepositories.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeRegisteredPackageRepositories.cs
@@ -72,7 +72,12 @@ namespace ICSharpCode.PackageManagement.Design
public FakePackage AddFakePackageWithVersionToActiveRepository(string version)
{
- var package = FakePackage.CreatePackageWithVersion("Test", version);
+ return AddFakePackageWithVersionToActiveRepository("Test", version);
+ }
+
+ public FakePackage AddFakePackageWithVersionToActiveRepository(string id, string version)
+ {
+ var package = FakePackage.CreatePackageWithVersion(id, version);
FakeActiveRepository.FakePackages.Add(package);
return package;
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSelectedProject.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSelectedProject.cs
index f6697bfba4..a87a5784e5 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSelectedProject.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSelectedProject.cs
@@ -42,11 +42,6 @@ namespace ICSharpCode.PackageManagement.Design
return String.Format("Name: {0}, IsSelected: {1}, IsEnabled: {2}", Name, IsSelected, IsEnabled);
}
- public FakeInstallPackageAction FakeInstallPackageAction {
- get { return FakeProject.FakeInstallPackageAction; }
- set { FakeProject.FakeInstallPackageAction = value; }
- }
-
public IPackageManagementProject Project {
get { return FakeProject; }
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs
index ebeb6d6bb0..5387233225 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs
@@ -128,7 +128,7 @@ namespace ICSharpCode.PackageManagement.Design
public void MakePackageSourceSectionsNull()
{
Sections.Remove(RegisteredPackageSourceSettings.PackageSourcesSectionName);
- Sections.Add(RegisteredPackageSourceSettings.PackageSourcesSectionName, null);
+ Sections.Add(RegisteredPackageSourceSettings.PackageSourcesSectionName, null);
}
public void AddFakePackageSources(IEnumerable packageSources)
@@ -187,5 +187,15 @@ namespace ICSharpCode.PackageManagement.Design
{
throw new NotImplementedException();
}
+
+ public IList> GetValues(string section, bool isPath)
+ {
+ throw new NotImplementedException();
+ }
+
+ public IList GetSettingValues(string section, bool isPath)
+ {
+ throw new NotImplementedException();
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeUninstallPackageAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeUninstallPackageAction.cs
index 1744cb4815..ecb99813d7 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeUninstallPackageAction.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeUninstallPackageAction.cs
@@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
+using ICSharpCode.PackageManagement.Scripting;
namespace ICSharpCode.PackageManagement.Design
{
@@ -22,5 +23,16 @@ namespace ICSharpCode.PackageManagement.Design
protected override void BeforeExecute()
{
}
+
+ protected override RunPackageScriptsAction CreateRunPackageScriptsAction(
+ IPackageScriptRunner scriptRunner,
+ IPackageManagementProject project)
+ {
+ return new RunPackageScriptsAction(
+ project,
+ scriptRunner,
+ new PackageScriptFactory(),
+ new NullGlobalMSBuildProjectCollection());
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeUpdatePackageAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeUpdatePackageAction.cs
index 539315fb12..b750b78d2e 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeUpdatePackageAction.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeUpdatePackageAction.cs
@@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
+using ICSharpCode.PackageManagement.Scripting;
namespace ICSharpCode.PackageManagement.Design
{
@@ -27,5 +28,16 @@ namespace ICSharpCode.PackageManagement.Design
protected override void BeforeExecute()
{
}
+
+ protected override RunPackageScriptsAction CreateRunPackageScriptsAction(
+ IPackageScriptRunner scriptRunner,
+ IPackageManagementProject project)
+ {
+ return new RunPackageScriptsAction(
+ project,
+ scriptRunner,
+ new PackageScriptFactory(),
+ new NullGlobalMSBuildProjectCollection());
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/FileConflictResolver.cs b/src/AddIns/Misc/PackageManagement/Project/Src/FileConflictResolver.cs
new file mode 100644
index 0000000000..e7b3144035
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/FileConflictResolver.cs
@@ -0,0 +1,44 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using ICSharpCode.Core;
+using NuGet;
+
+namespace ICSharpCode.PackageManagement
+{
+ public class FileConflictResolver : ServiceWithWorkbenchOwner, IFileConflictResolver
+ {
+ IPackageManagementWorkbench workbench;
+
+ public FileConflictResolver()
+ : this(new PackageManagementWorkbench())
+ {
+ }
+
+ public FileConflictResolver(IPackageManagementWorkbench workbench)
+ {
+ this.workbench = workbench;
+ }
+
+ public FileConflictResolution ResolveFileConflict(string message)
+ {
+ if (workbench.InvokeRequired) {
+ return workbench.SafeThreadFunction(() => ResolveFileConflict(message));
+ } else {
+ var viewModel = new FileConflictViewModel(message);
+ FileConflictView view = CreateFileConflictView(viewModel);
+ view.ShowDialog();
+ return viewModel.GetResolution();
+ }
+ }
+
+ FileConflictView CreateFileConflictView(FileConflictViewModel viewModel)
+ {
+ var view = new FileConflictView();
+ view.ViewModel = viewModel;
+ view.Owner = Owner;
+ return view;
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/FileConflictView.xaml b/src/AddIns/Misc/PackageManagement/Project/Src/FileConflictView.xaml
new file mode 100644
index 0000000000..6691328ddb
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/FileConflictView.xaml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/FileConflictView.xaml.cs b/src/AddIns/Misc/PackageManagement/Project/Src/FileConflictView.xaml.cs
new file mode 100644
index 0000000000..2edf3dcbcb
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/FileConflictView.xaml.cs
@@ -0,0 +1,32 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Windows;
+
+namespace ICSharpCode.PackageManagement
+{
+ public partial class FileConflictView : Window
+ {
+ FileConflictViewModel viewModel;
+
+ public FileConflictView()
+ {
+ InitializeComponent();
+ }
+
+ public FileConflictViewModel ViewModel {
+ get { return viewModel; }
+ set {
+ viewModel = value;
+ viewModel.Close += CloseView;
+ DataContext = viewModel;
+ }
+ }
+
+ void CloseView(object sender, EventArgs e)
+ {
+ DialogResult = true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/FileConflictViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/FileConflictViewModel.cs
new file mode 100644
index 0000000000..dbce8f29fa
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/FileConflictViewModel.cs
@@ -0,0 +1,48 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Windows.Input;
+using NuGet;
+
+namespace ICSharpCode.PackageManagement
+{
+ public class FileConflictViewModel
+ {
+ FileConflictResolution resolution = FileConflictResolution.Ignore;
+
+ public FileConflictViewModel(string message)
+ {
+ this.Message = message;
+ CreateCommands();
+ }
+
+ void CreateCommands()
+ {
+ YesCommand = new DelegateCommand(param => UpdateResolution(FileConflictResolution.Overwrite));
+ YesToAllCommand = new DelegateCommand(param => UpdateResolution(FileConflictResolution.OverwriteAll));
+ NoCommand = new DelegateCommand(param => UpdateResolution(FileConflictResolution.Ignore));
+ NoToAllCommand = new DelegateCommand(param => UpdateResolution(FileConflictResolution.IgnoreAll));
+ }
+
+ void UpdateResolution(FileConflictResolution resolution)
+ {
+ this.resolution = resolution;
+ Close(this, new EventArgs());
+ }
+
+ public event EventHandler Close;
+
+ public ICommand YesCommand { get; private set; }
+ public ICommand YesToAllCommand { get; private set; }
+ public ICommand NoCommand { get; private set; }
+ public ICommand NoToAllCommand { get; private set; }
+
+ public string Message { get; private set; }
+
+ public FileConflictResolution GetResolution()
+ {
+ return resolution;
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageAction.cs
new file mode 100644
index 0000000000..d62ed736a4
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageAction.cs
@@ -0,0 +1,15 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using ICSharpCode.PackageManagement.Scripting;
+
+namespace ICSharpCode.PackageManagement
+{
+ public interface IPackageAction
+ {
+ void Execute();
+ bool HasPackageScriptsToRun();
+ IPackageScriptRunner PackageScriptRunner { get; set; }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageActionRunner.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageActionRunner.cs
index 27d2ee38c8..0c243efdf8 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageActionRunner.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageActionRunner.cs
@@ -8,7 +8,7 @@ namespace ICSharpCode.PackageManagement
{
public interface IPackageActionRunner
{
- void Run(ProcessPackageAction action);
- void Run(IEnumerable actions);
+ void Run(IPackageAction action);
+ void Run(IEnumerable actions);
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageExtensions.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageExtensions.cs
index 5ddc014a53..450dc872ba 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageExtensions.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageExtensions.cs
@@ -17,5 +17,15 @@ namespace ICSharpCode.PackageManagement
return package.Description;
return package.Summary;
}
+
+ ///
+ /// Returns package Id if it has no title.
+ ///
+ public static string GetName(this IPackage package)
+ {
+ if (String.IsNullOrEmpty(package.Title))
+ return package.Id;
+ return package.Title;
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageFromRepository.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageFromRepository.cs
index f6c37c5463..0c4df4fdd5 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageFromRepository.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageFromRepository.cs
@@ -11,5 +11,6 @@ namespace ICSharpCode.PackageManagement
IPackageRepository Repository { get; }
bool HasDependencies { get; }
DateTime? LastUpdated { get; }
+ Uri GalleryUrl { get; }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementEvents.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementEvents.cs
index c603626165..c91d44cd44 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementEvents.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementEvents.cs
@@ -12,17 +12,21 @@ namespace ICSharpCode.PackageManagement
event EventHandler PackageOperationsStarting;
event EventHandler AcceptLicenses;
event EventHandler SelectProjects;
+ event EventHandler ResolveFileConflict;
event EventHandler PackageOperationError;
event EventHandler ParentPackageInstalled;
event EventHandler ParentPackageUninstalled;
+ event EventHandler ParentPackagesUpdated;
event EventHandler PackageOperationMessageLogged;
-
- void OnPackageOperationsStarting();
+
+ void OnPackageOperationsStarting();
void OnPackageOperationError(Exception ex);
bool OnAcceptLicenses(IEnumerable packages);
void OnParentPackageInstalled(IPackage package);
void OnParentPackageUninstalled(IPackage package);
+ void OnParentPackagesUpdated(IEnumerable packages);
void OnPackageOperationMessageLogged(MessageLevel level, string message, params object[] args);
bool OnSelectProjects(IEnumerable selectedProjects);
+ FileConflictResolution OnResolveFileConflict(string message);
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProject.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProject.cs
index 4c0af04881..4450c7e528 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProject.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProject.cs
@@ -25,18 +25,26 @@ namespace ICSharpCode.PackageManagement
bool IsPackageInstalled(IPackage package);
bool IsPackageInstalled(string packageId);
+ bool HasOlderPackageInstalled(IPackage package);
IQueryable GetPackages();
IEnumerable GetPackagesInReverseDependencyOrder();
IEnumerable GetInstallPackageOperations(IPackage package, InstallPackageAction installAction);
+ IEnumerable GetUpdatePackagesOperations(IEnumerable packages, IUpdatePackageSettings settings);
void InstallPackage(IPackage package, InstallPackageAction installAction);
void UpdatePackage(IPackage package, UpdatePackageAction updateAction);
void UninstallPackage(IPackage package, UninstallPackageAction uninstallAction);
+ void UpdatePackages(UpdatePackagesAction action);
+
+ void UpdatePackageReference(IPackage package, IUpdatePackageSettings settings);
InstallPackageAction CreateInstallPackageAction();
UninstallPackageAction CreateUninstallPackageAction();
UpdatePackageAction CreateUpdatePackageAction();
+ UpdatePackagesAction CreateUpdatePackagesAction();
+
+ void RunPackageOperations(IEnumerable expectedOperations);
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementWorkbench.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementWorkbench.cs
index 3755792cc5..4f601dc17a 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementWorkbench.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementWorkbench.cs
@@ -11,6 +11,9 @@ namespace ICSharpCode.PackageManagement
void SafeThreadAsyncCall(Action method, A arg1);
void SafeThreadAsyncCall(Action method, A arg1, B arg2);
+ R SafeThreadFunction(Func method);
+
void CreateConsolePad();
+ void ShowConsolePad();
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageOperationResolverFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageOperationResolverFactory.cs
index 3153c5f475..ebd2336677 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageOperationResolverFactory.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageOperationResolverFactory.cs
@@ -13,5 +13,11 @@ namespace ICSharpCode.PackageManagement
IPackageRepository sourceRepository,
ILogger logger,
InstallPackageAction installAction);
+
+ IPackageOperationResolver CreateUpdatePackageOperationResolver(
+ IPackageRepository localRepository,
+ IPackageRepository sourceRepository,
+ ILogger logger,
+ IUpdatePackageSettings settings);
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageViewModelFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageViewModelFactory.cs
index 7c55cb4eb0..db67623268 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageViewModelFactory.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageViewModelFactory.cs
@@ -9,11 +9,12 @@ namespace ICSharpCode.PackageManagement
{
public interface IPackageViewModelFactory
{
- PackageViewModel CreatePackageViewModel(IPackageFromRepository package);
+ PackageViewModel CreatePackageViewModel(IPackageViewModelParent parent, IPackageFromRepository package);
IPackageManagementSolution Solution { get; }
PackageManagementSelectedProjects SelectedProjects { get; }
IPackageManagementEvents PackageManagementEvents { get; }
IPackageActionRunner PackageActionRunner { get; }
+ ILogger Logger { get; }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageViewModelParent.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageViewModelParent.cs
new file mode 100644
index 0000000000..99824ed849
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageViewModelParent.cs
@@ -0,0 +1,12 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+
+namespace ICSharpCode.PackageManagement
+{
+ public interface IPackageViewModelParent
+ {
+ bool IncludePrerelease { get; }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopPackageManager.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopPackageManager.cs
index 916ecb08db..5010d5233e 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopPackageManager.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopPackageManager.cs
@@ -14,7 +14,12 @@ namespace ICSharpCode.PackageManagement
void InstallPackage(IPackage package, InstallPackageAction installAction);
void UninstallPackage(IPackage package, UninstallPackageAction uninstallAction);
void UpdatePackage(IPackage package, UpdatePackageAction updateAction);
+ void UpdatePackages(UpdatePackagesAction updateAction);
+ void UpdatePackageReference(IPackage package, IUpdatePackageSettings settings);
IEnumerable GetInstallPackageOperations(IPackage package, InstallPackageAction installAction);
+ IEnumerable GetUpdatePackageOperations(IEnumerable packages, IUpdatePackageSettings settings);
+
+ void RunPackageOperations(IEnumerable operations);
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopProjectManager.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopProjectManager.cs
index 740e70ebcf..bbaf20f0fd 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopProjectManager.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopProjectManager.cs
@@ -10,5 +10,6 @@ namespace ICSharpCode.PackageManagement
{
IPackagePathResolver PathResolver { get; }
bool IsInstalled(string packageId);
+ bool HasOlderPackageInstalled(IPackage package);
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IUpdatePackageActions.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IUpdatePackageActions.cs
index 2eaa69be5f..33334a4d72 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/IUpdatePackageActions.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IUpdatePackageActions.cs
@@ -7,10 +7,8 @@ using ICSharpCode.PackageManagement.Scripting;
namespace ICSharpCode.PackageManagement
{
- public interface IUpdatePackageActions
+ public interface IUpdatePackageActions : IUpdatePackageSettings
{
- bool UpdateDependencies { get; set; }
- bool AllowPrereleaseVersions { get; set; }
IPackageScriptRunner PackageScriptRunner { get; set; }
IEnumerable CreateActions();
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IUpdatePackageSettings.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IUpdatePackageSettings.cs
new file mode 100644
index 0000000000..d357bdae15
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IUpdatePackageSettings.cs
@@ -0,0 +1,13 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+
+namespace ICSharpCode.PackageManagement
+{
+ public interface IUpdatePackageSettings
+ {
+ bool UpdateDependencies { get; set; }
+ bool AllowPrereleaseVersions { get; set; }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IUpdatePackagesAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IUpdatePackagesAction.cs
new file mode 100644
index 0000000000..70e905595a
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IUpdatePackagesAction.cs
@@ -0,0 +1,18 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Collections.Generic;
+using NuGet;
+
+namespace ICSharpCode.PackageManagement
+{
+ public interface IUpdatePackagesAction : IPackageAction, IUpdatePackageSettings
+ {
+ IEnumerable Operations { get; }
+ ILogger Logger { get; set; }
+
+ void AddPackages(IEnumerable packages);
+ void AddOperations(IEnumerable operations);
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackageViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackageViewModel.cs
index 858228df31..ce24726044 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackageViewModel.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackageViewModel.cs
@@ -10,12 +10,13 @@ namespace ICSharpCode.PackageManagement
public class InstalledPackageViewModel : PackageViewModel
{
public InstalledPackageViewModel(
+ IPackageViewModelParent parent,
IPackageFromRepository package,
SelectedProjectsForInstalledPackages selectedProjects,
IPackageManagementEvents packageManagementEvents,
IPackageActionRunner actionRunner,
ILogger logger)
- : base(package, selectedProjects, packageManagementEvents, actionRunner, logger)
+ : base(parent, package, selectedProjects, packageManagementEvents, actionRunner, logger)
{
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackageViewModelFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackageViewModelFactory.cs
index b6fb68ad8d..8a5a02093d 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackageViewModelFactory.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackageViewModelFactory.cs
@@ -15,9 +15,10 @@ namespace ICSharpCode.PackageManagement
selectedProjectsForInstalledPackages = new SelectedProjectsForInstalledPackages(Solution);
}
- public override PackageViewModel CreatePackageViewModel(IPackageFromRepository package)
+ public override PackageViewModel CreatePackageViewModel(IPackageViewModelParent parent, IPackageFromRepository package)
{
return new InstalledPackageViewModel(
+ parent,
package,
selectedProjectsForInstalledPackages,
PackageManagementEvents,
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackagesViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackagesViewModel.cs
index 02aa55bb97..52473737c8 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackagesViewModel.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackagesViewModel.cs
@@ -25,12 +25,18 @@ namespace ICSharpCode.PackageManagement
{
this.solution = solution;
this.packageManagementEvents = packageManagementEvents;
- packageManagementEvents.ParentPackageInstalled += InstalledPackagesChanged;
- packageManagementEvents.ParentPackageUninstalled += InstalledPackagesChanged;
+ RegisterEvents();
TryGetActiveProject();
}
+ void RegisterEvents()
+ {
+ packageManagementEvents.ParentPackageInstalled += InstalledPackagesChanged;
+ packageManagementEvents.ParentPackageUninstalled += InstalledPackagesChanged;
+ packageManagementEvents.ParentPackagesUpdated += InstalledPackagesChanged;
+ }
+
void TryGetActiveProject()
{
try {
@@ -49,6 +55,7 @@ namespace ICSharpCode.PackageManagement
{
packageManagementEvents.ParentPackageInstalled -= InstalledPackagesChanged;
packageManagementEvents.ParentPackageUninstalled -= InstalledPackagesChanged;
+ packageManagementEvents.ParentPackagesUpdated -= InstalledPackagesChanged;
}
protected override IQueryable GetAllPackages()
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/LicenseAcceptanceService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/LicenseAcceptanceService.cs
index 059cbd90d5..17eee4abda 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/LicenseAcceptanceService.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/LicenseAcceptanceService.cs
@@ -10,19 +10,8 @@ using NuGet;
namespace ICSharpCode.PackageManagement
{
- public class LicenseAcceptanceService : ILicenseAcceptanceService
+ public class LicenseAcceptanceService : ServiceWithWorkbenchOwner, ILicenseAcceptanceService
{
- Window owner;
-
- public Window Owner {
- get {
- if (owner == null) {
- owner = SD.Workbench.MainWindow;
- }
- return owner;
- }
- set { owner = value; }
- }
public bool AcceptLicenses(IEnumerable packages)
{
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/LicenseAcceptanceView.xaml b/src/AddIns/Misc/PackageManagement/Project/Src/LicenseAcceptanceView.xaml
index f8e5280a00..b60d26b574 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/LicenseAcceptanceView.xaml
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/LicenseAcceptanceView.xaml
@@ -38,7 +38,7 @@
-
+
actions)
+ public void Run(IEnumerable actions)
{
if (ShouldRunActionsInConsole(actions)) {
consolePackageActionRunner.Run(actions);
@@ -42,9 +42,9 @@ namespace ICSharpCode.PackageManagement
}
}
- bool ShouldRunActionsInConsole(IEnumerable actions)
+ bool ShouldRunActionsInConsole(IEnumerable actions)
{
- foreach (ProcessPackageAction action in actions) {
+ foreach (IPackageAction action in actions) {
if (ShouldRunActionInConsole(action)) {
return true;
}
@@ -52,7 +52,7 @@ namespace ICSharpCode.PackageManagement
return false;
}
- public void Run(ProcessPackageAction action)
+ public void Run(IPackageAction action)
{
if (ShouldRunActionInConsole(action)) {
consolePackageActionRunner.Run(action);
@@ -61,7 +61,7 @@ namespace ICSharpCode.PackageManagement
}
}
- bool ShouldRunActionInConsole(ProcessPackageAction action)
+ bool ShouldRunActionInConsole(IPackageAction action)
{
if (action.HasPackageScriptsToRun()) {
if (powerShellDetection.IsPowerShell2Installed()) {
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageActionsToRun.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageActionsToRun.cs
index 06b1958798..a4aab81747 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageActionsToRun.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageActionsToRun.cs
@@ -8,14 +8,14 @@ namespace ICSharpCode.PackageManagement
{
public class PackageActionsToRun
{
- ConcurrentQueue actions = new ConcurrentQueue();
+ ConcurrentQueue actions = new ConcurrentQueue();
- public bool GetNextAction(out ProcessPackageAction action)
+ public bool GetNextAction(out IPackageAction action)
{
return actions.TryDequeue(out action);
}
- public void AddAction(ProcessPackageAction action)
+ public void AddAction(IPackageAction action)
{
actions.Enqueue(action);
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageFromRepository.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageFromRepository.cs
index d92cd16fee..68dc53b810 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageFromRepository.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageFromRepository.cs
@@ -174,5 +174,23 @@ namespace ICSharpCode.PackageManagement
{
return package.ToString();
}
+
+ public ICollection PackageAssemblyReferences {
+ get { return package.PackageAssemblyReferences; }
+ }
+
+ public Version MinClientVersion {
+ get { return package.MinClientVersion; }
+ }
+
+ public Uri GalleryUrl {
+ get {
+ var dataServicePackage = package as DataServicePackage;
+ if (dataServicePackage != null) {
+ return dataServicePackage.GalleryDetailsUrl;
+ }
+ return null;
+ }
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementEvents.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementEvents.cs
index 0faceea95b..05197bc829 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementEvents.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementEvents.cs
@@ -78,5 +78,26 @@ namespace ICSharpCode.PackageManagement
}
return true;
}
+
+ public event EventHandler ResolveFileConflict;
+
+ public FileConflictResolution OnResolveFileConflict(string message)
+ {
+ if (ResolveFileConflict != null) {
+ var eventArgs = new ResolveFileConflictEventArgs(message);
+ ResolveFileConflict(this, eventArgs);
+ return eventArgs.Resolution;
+ }
+ return FileConflictResolution.IgnoreAll;
+ }
+
+ public event EventHandler ParentPackagesUpdated;
+
+ public void OnParentPackagesUpdated(IEnumerable packages)
+ {
+ if (ParentPackagesUpdated != null) {
+ ParentPackagesUpdated(this, new ParentPackagesOperationEventArgs(packages));
+ }
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementLogger.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementLogger.cs
index b9e050832d..995de15543 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementLogger.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementLogger.cs
@@ -19,5 +19,10 @@ namespace ICSharpCode.PackageManagement
{
packageManagementEvents.OnPackageOperationMessageLogged(level, message, args);
}
+
+ public FileConflictResolution ResolveFileConflict(string message)
+ {
+ return packageManagementEvents.OnResolveFileConflict(message);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs
index 8280482cfb..a95ec59472 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs
@@ -28,7 +28,7 @@ namespace ICSharpCode.PackageManagement
}
public PackageManagementOptions(Properties properties)
- : this(properties, Settings.LoadDefaultSettings(null))
+ : this(properties, Settings.LoadDefaultSettings(null, null, null))
{
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs
index f42d2d3033..01fa702369 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs
@@ -131,5 +131,37 @@ namespace ICSharpCode.PackageManagement
.GetPackagesByDependencyOrder(projectManager.LocalRepository)
.Reverse();
}
+
+ public void UpdatePackages(UpdatePackagesAction updateAction)
+ {
+ packageManager.UpdatePackages(updateAction);
+ }
+
+ public UpdatePackagesAction CreateUpdatePackagesAction()
+ {
+ return new UpdatePackagesAction(this, packageManagementEvents);
+ }
+
+ public IEnumerable GetUpdatePackagesOperations(
+ IEnumerable packages,
+ IUpdatePackageSettings settings)
+ {
+ return packageManager.GetUpdatePackageOperations(packages, settings);
+ }
+
+ public void RunPackageOperations(IEnumerable operations)
+ {
+ packageManager.RunPackageOperations(operations);
+ }
+
+ public bool HasOlderPackageInstalled(IPackage package)
+ {
+ return projectManager.HasOlderPackageInstalled(package);
+ }
+
+ public void UpdatePackageReference(IPackage package, IUpdatePackageSettings settings)
+ {
+ packageManager.UpdatePackageReference(package, settings);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSelectedProjects.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSelectedProjects.cs
index 78dcfdb2c3..4f3cb786e7 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSelectedProjects.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSelectedProjects.cs
@@ -13,16 +13,17 @@ namespace ICSharpCode.PackageManagement
{
public class PackageManagementSelectedProjects
{
- IPackageManagementSolution solution;
bool? singleProjectSelected;
IProject singleMSBuildProjectSelected;
public PackageManagementSelectedProjects(IPackageManagementSolution solution)
{
- this.solution = solution;
+ this.Solution = solution;
GetHasSingleProjectSelected();
}
+ public IPackageManagementSolution Solution { get; private set; }
+
public IEnumerable GetProjects(IPackageFromRepository package)
{
if (HasSingleProjectSelected()) {
@@ -44,13 +45,13 @@ namespace ICSharpCode.PackageManagement
void GetHasSingleProjectSelected()
{
- singleMSBuildProjectSelected = solution.GetActiveMSBuildProject();
+ singleMSBuildProjectSelected = Solution.GetActiveMSBuildProject();
singleProjectSelected = singleMSBuildProjectSelected != null;
}
IEnumerable GetOpenProjects()
{
- return solution.GetMSBuildProjects();
+ return Solution.GetMSBuildProjects();
}
IPackageManagementSelectedProject GetSingleProjectSelected(IPackageFromRepository package)
@@ -60,7 +61,7 @@ namespace ICSharpCode.PackageManagement
IPackageManagementSelectedProject CreateSelectedProject(IProject msbuildProject, IPackageFromRepository package)
{
- IPackageManagementProject project = solution.GetProject(package.Repository, msbuildProject);
+ IPackageManagementProject project = Solution.GetProject(package.Repository, msbuildProject);
return CreateSelectedProject(project, package);
}
@@ -88,7 +89,7 @@ namespace ICSharpCode.PackageManagement
if (HasSingleProjectSelected()) {
return false;
}
- return solution.HasMultipleProjects();
+ return Solution.HasMultipleProjects();
}
public string SelectionName {
@@ -110,7 +111,7 @@ namespace ICSharpCode.PackageManagement
string GetSolutionFileNameWithoutFullPath()
{
- return Path.GetFileName(solution.FileName);
+ return Path.GetFileName(Solution.FileName);
}
///
@@ -127,12 +128,12 @@ namespace ICSharpCode.PackageManagement
public bool IsPackageInstalledInSolution(IPackage package)
{
- return solution.IsPackageInstalled(package);
+ return Solution.IsPackageInstalled(package);
}
public IQueryable GetPackagesInstalledInSolution()
{
- return solution.GetPackages();
+ return Solution.GetPackages();
}
public IQueryable GetInstalledPackages(IPackageRepository sourceRepository)
@@ -147,7 +148,7 @@ namespace ICSharpCode.PackageManagement
public IPackageManagementProject GetSingleProjectSelected(IPackageRepository repository)
{
if (HasSingleProjectSelected()) {
- return solution.GetProject(repository, singleMSBuildProjectSelected);
+ return Solution.GetProject(repository, singleMSBuildProjectSelected);
}
return null;
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs
index 70025d3e04..106bfc0b4e 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs
@@ -3,6 +3,7 @@
using System;
using ICSharpCode.PackageManagement.Scripting;
+using NuGet;
namespace ICSharpCode.PackageManagement
{
@@ -41,6 +42,17 @@ namespace ICSharpCode.PackageManagement
resetPowerShellWorkingDirectory = new ResetPowerShellWorkingDirectoryOnSolutionClosed(projectService, ConsoleHost);
var consolePackageActionRunner = new ConsolePackageActionRunner(ConsoleHost, packageActionsToRun);
packageActionRunner = new PackageActionRunner(consolePackageActionRunner, packageManagementEvents);
+
+ InitializeCredentialProvider();
+ }
+
+ static void InitializeCredentialProvider()
+ {
+ ISettings settings = Settings.LoadDefaultSettings(null, null, null);
+ var packageSourceProvider = new PackageSourceProvider(settings);
+ var credentialProvider = new SettingsCredentialProvider(new SharpDevelopCredentialProvider(), packageSourceProvider);
+
+ HttpClient.DefaultCredentialProvider = credentialProvider;
}
public static PackageManagementOptions Options {
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementWorkbench.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementWorkbench.cs
index 7ab57051ce..d3332ae8de 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementWorkbench.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementWorkbench.cs
@@ -12,17 +12,27 @@ namespace ICSharpCode.PackageManagement
{
public void CreateConsolePad()
{
- PadDescriptor pad = SD.Workbench.GetPad(typeof(PackageManagementConsolePad));
- pad.BringPadToFront();
+ PadDescriptor pad = GetConsolePad();
EnsurePackageManagementConsoleViewModelIsCreated(pad);
}
+ PadDescriptor GetConsolePad()
+ {
+ return SD.Workbench.GetPad(typeof(PackageManagementConsolePad));
+ }
+
void EnsurePackageManagementConsoleViewModelIsCreated(PadDescriptor pad)
{
// Force creation of view model.
object control = pad.PadContent.Control;
}
+ public void ShowConsolePad()
+ {
+ PadDescriptor pad = GetConsolePad();
+ pad.BringPadToFront();
+ }
+
public bool InvokeRequired {
get { return SD.MainThread.InvokeRequired; }
}
@@ -36,5 +46,10 @@ namespace ICSharpCode.PackageManagement
{
SD.MainThread.InvokeAsyncAndForget(() => method(arg1, arg2));
}
+
+ public R SafeThreadFunction(Func method)
+ {
+ return WorkbenchSingleton.SafeThreadFunction(method);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageOperationsResolverFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageOperationsResolverFactory.cs
index 22b20e25e7..e1522de1ec 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageOperationsResolverFactory.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageOperationsResolverFactory.cs
@@ -22,5 +22,16 @@ namespace ICSharpCode.PackageManagement
installAction.IgnoreDependencies,
installAction.AllowPrereleaseVersions);
}
+
+ public IPackageOperationResolver CreateUpdatePackageOperationResolver(IPackageRepository localRepository, IPackageRepository sourceRepository, ILogger logger, IUpdatePackageSettings settings)
+ {
+ return new InstallWalker(
+ localRepository,
+ sourceRepository,
+ null,
+ logger,
+ !settings.UpdateDependencies,
+ settings.AllowPrereleaseVersions);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs
index 5a3fdb1b90..7c4816fd65 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs
@@ -22,14 +22,17 @@ namespace ICSharpCode.PackageManagement
IEnumerable packageOperations = new PackageOperation[0];
PackageViewModelOperationLogger logger;
IPackageActionRunner actionRunner;
+ IPackageViewModelParent parent;
public PackageViewModel(
+ IPackageViewModelParent parent,
IPackageFromRepository package,
PackageManagementSelectedProjects selectedProjects,
IPackageManagementEvents packageManagementEvents,
IPackageActionRunner actionRunner,
ILogger logger)
{
+ this.parent = parent;
this.package = package;
this.selectedProjects = selectedProjects;
this.packageManagementEvents = packageManagementEvents;
@@ -39,6 +42,11 @@ namespace ICSharpCode.PackageManagement
CreateCommands();
}
+ public IPackageViewModelParent GetParent()
+ {
+ return parent;
+ }
+
protected virtual PackageViewModelOperationLogger CreateLogger(ILogger logger)
{
return new PackageViewModelOperationLogger(logger, package);
@@ -125,6 +133,22 @@ namespace ICSharpCode.PackageManagement
get { return package.Id; }
}
+ public string Name {
+ get { return package.GetName(); }
+ }
+
+ public bool HasGalleryUrl {
+ get { return GalleryUrl != null; }
+ }
+
+ public bool HasNoGalleryUrl {
+ get { return !HasGalleryUrl; }
+ }
+
+ public Uri GalleryUrl {
+ get { return package.GalleryUrl; }
+ }
+
public Uri IconUrl {
get { return package.IconUrl; }
}
@@ -170,7 +194,8 @@ namespace ICSharpCode.PackageManagement
{
IPackageManagementProject project = GetSingleProjectSelected();
project.Logger = logger;
- var installAction = project.CreateInstallPackageAction();
+ InstallPackageAction installAction = project.CreateInstallPackageAction();
+ installAction.AllowPrereleaseVersions = parent.IncludePrerelease;
packageOperations = project.GetInstallPackageOperations(package, installAction);
}
@@ -243,6 +268,7 @@ namespace ICSharpCode.PackageManagement
{
IPackageManagementProject project = GetSingleProjectSelected();
ProcessPackageOperationsAction action = CreateInstallPackageAction(project);
+ action.AllowPrereleaseVersions = parent.IncludePrerelease;
action.Package = package;
action.Operations = packageOperations;
actionRunner.Run(action);
@@ -355,6 +381,7 @@ namespace ICSharpCode.PackageManagement
foreach (IPackageManagementSelectedProject selectedProject in selectedProjects) {
if (selectedProject.IsSelected) {
ProcessPackageAction action = CreateInstallPackageAction(selectedProject);
+ action.AllowPrereleaseVersions = parent.IncludePrerelease;
actions.Add(action);
}
}
@@ -402,7 +429,7 @@ namespace ICSharpCode.PackageManagement
void RunActionsIfAnyExist(IList actions)
{
if (actions.Any()) {
- actionRunner.Run(actions);
+ actionRunner.Run(actions);
}
}
@@ -410,7 +437,9 @@ namespace ICSharpCode.PackageManagement
{
IPackageManagementProject project = selectedProject.Project;
project.Logger = logger;
- IEnumerable operations = project.GetInstallPackageOperations(package, project.CreateInstallPackageAction());
+ InstallPackageAction installAction = project.CreateInstallPackageAction();
+ installAction.AllowPrereleaseVersions = parent.IncludePrerelease;
+ IEnumerable operations = project.GetInstallPackageOperations(package, installAction);
return GetPackagesRequiringLicenseAcceptance(operations);
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelFactory.cs
index 0a23b24f8a..206e584042 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelFactory.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelFactory.cs
@@ -29,9 +29,10 @@ namespace ICSharpCode.PackageManagement
this.Logger = new PackageManagementLogger(packageManagementEvents);
}
- public virtual PackageViewModel CreatePackageViewModel(IPackageFromRepository package)
+ public virtual PackageViewModel CreatePackageViewModel(IPackageViewModelParent parent, IPackageFromRepository package)
{
return new PackageViewModel(
+ parent,
package,
SelectedProjects,
PackageManagementEvents,
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelOperationLogger.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelOperationLogger.cs
index 59ab4b05b8..655a2e6859 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelOperationLogger.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelOperationLogger.cs
@@ -60,7 +60,7 @@ namespace ICSharpCode.PackageManagement
public void LogAddingPackage()
{
string message = GetFormattedStartPackageOperationMessage(AddingPackageMessageFormat);
- LogInformation(message);
+ LogInformation(message);
}
string GetFormattedStartPackageOperationMessage(string format)
@@ -88,7 +88,12 @@ namespace ICSharpCode.PackageManagement
public void LogManagingPackage()
{
string message = GetFormattedStartPackageOperationMessage(ManagingPackageMessageFormat);
- LogInformation(message);
+ LogInformation(message);
+ }
+
+ public FileConflictResolution ResolveFileConflict(string message)
+ {
+ return logger.ResolveFileConflict(message);
}
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackagesView.xaml b/src/AddIns/Misc/PackageManagement/Project/Src/PackagesView.xaml
index 05694252a6..4dbb55b638 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackagesView.xaml
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackagesView.xaml
@@ -1,4 +1,4 @@
-
+
+
+
+
+
+
+
+
+
@@ -318,6 +336,8 @@
+
+
+
+
, IDisposable
+ public abstract class PackagesViewModel : ViewModelBase, IDisposable, IPackageViewModelParent
{
Pages pages = new Pages();
@@ -22,7 +22,8 @@ namespace ICSharpCode.PackageManagement
ITaskFactory taskFactory;
IEnumerable allPackages;
ITask task;
-
+ bool includePrerelease;
+
public PackagesViewModel(
IRegisteredPackageRepositories registeredPackageRepositories,
IPackageViewModelFactory packageViewModelFactory,
@@ -44,12 +45,14 @@ namespace ICSharpCode.PackageManagement
ShowPreviousPageCommand = new DelegateCommand(param => ShowPreviousPage());
ShowPageCommand = new DelegateCommand(param => ExecuteShowPageCommand(param));
SearchCommand = new DelegateCommand(param => Search());
+ UpdateAllPackagesCommand = new DelegateCommand(param => UpdateAllPackages());
}
public ICommand ShowNextPageCommand { get; private set; }
public ICommand ShowPreviousPageCommand { get; private set; }
public ICommand ShowPageCommand { get; private set; }
public ICommand SearchCommand { get; private set; }
+ public ICommand UpdateAllPackagesCommand { get; private set; }
public void Dispose()
{
@@ -265,7 +268,7 @@ namespace ICSharpCode.PackageManagement
{
var repository = registeredPackageRepositories.ActiveRepository;
var packageFromRepository = new PackageFromRepository(package, repository);
- return packageViewModelFactory.CreatePackageViewModel(packageFromRepository);
+ return packageViewModelFactory.CreatePackageViewModel(this, packageFromRepository);
}
public int SelectedPageNumber {
@@ -281,7 +284,7 @@ namespace ICSharpCode.PackageManagement
public int PageSize {
get { return pages.PageSize; }
- set { pages.PageSize = value; }
+ set { pages.PageSize = value; }
}
public bool IsPaged {
@@ -361,5 +364,59 @@ namespace ICSharpCode.PackageManagement
}
}
}
+
+ public bool ShowUpdateAllPackages { get; set; }
+
+ public bool IsUpdateAllPackagesEnabled {
+ get {
+ return ShowUpdateAllPackages && (TotalItems > 1);
+ }
+ }
+
+ void UpdateAllPackages()
+ {
+ try {
+ packageViewModelFactory.PackageManagementEvents.OnPackageOperationsStarting();
+ TryUpdatingAllPackages();
+ } catch (Exception ex) {
+ ReportError(ex);
+ LogError(ex);
+ }
+ }
+
+ void LogError(Exception ex)
+ {
+ packageViewModelFactory
+ .Logger
+ .Log(MessageLevel.Error, ex.ToString());
+ }
+
+ void ReportError(Exception ex)
+ {
+ packageViewModelFactory
+ .PackageManagementEvents
+ .OnPackageOperationError(ex);
+ }
+
+ protected virtual void TryUpdatingAllPackages()
+ {
+ }
+
+ protected IPackageActionRunner ActionRunner {
+ get { return packageViewModelFactory.PackageActionRunner; }
+ }
+
+ public bool IncludePrerelease {
+ get { return includePrerelease; }
+ set {
+ if (includePrerelease != value) {
+ includePrerelease = value;
+ ReadPackages();
+ OnPropertyChanged(null);
+ }
+ }
+ }
+
+ public bool ShowPrerelease { get; set; }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ParentPackagesOperationEventArgs.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ParentPackagesOperationEventArgs.cs
new file mode 100644
index 0000000000..c2a046554e
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/ParentPackagesOperationEventArgs.cs
@@ -0,0 +1,19 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Collections.Generic;
+using NuGet;
+
+namespace ICSharpCode.PackageManagement
+{
+ public class ParentPackagesOperationEventArgs : EventArgs
+ {
+ public ParentPackagesOperationEventArgs(IEnumerable packages)
+ {
+ this.Packages = packages;
+ }
+
+ public IEnumerable Packages { get; private set; }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs
index 502245861b..2d02c30426 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs
@@ -8,7 +8,7 @@ using NuGet;
namespace ICSharpCode.PackageManagement
{
- public abstract class ProcessPackageAction
+ public abstract class ProcessPackageAction : IPackageAction
{
IPackageManagementEvents packageManagementEvents;
@@ -45,11 +45,23 @@ namespace ICSharpCode.PackageManagement
public void Execute()
{
- BeforeExecute();
- if (PackageScriptRunner != null) {
- ExecuteWithScriptRunner();
- } else {
- ExecuteCore();
+ RunWithExceptionReporting(() => {
+ BeforeExecute();
+ if (PackageScriptRunner != null) {
+ ExecuteWithScriptRunner();
+ } else {
+ ExecuteCore();
+ }
+ });
+ }
+
+ void RunWithExceptionReporting(Action action)
+ {
+ try {
+ action();
+ } catch (Exception ex) {
+ packageManagementEvents.OnPackageOperationError(ex);
+ throw;
}
}
@@ -107,7 +119,7 @@ namespace ICSharpCode.PackageManagement
void FindPackage()
{
- Package =Project
+ Package = Project
.SourceRepository
.FindPackage(PackageId, PackageVersion, AllowPrereleaseVersions, allowUnlisted: true);
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageOperationsAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageOperationsAction.cs
index 0ec36b8605..7b5b11f550 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageOperationsAction.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageOperationsAction.cs
@@ -30,7 +30,7 @@ namespace ICSharpCode.PackageManagement
base.BeforeExecute();
GetPackageOperationsIfMissing();
}
-
+
void GetPackageOperationsIfMissing()
{
if (Operations == null) {
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ProjectBrowserRefresher.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ProjectBrowserRefresher.cs
index 081bc557e4..824c6fb9da 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/ProjectBrowserRefresher.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/ProjectBrowserRefresher.cs
@@ -19,9 +19,10 @@ namespace ICSharpCode.PackageManagement
packageManagementEvents.ParentPackageInstalled += ProjectChanged;
packageManagementEvents.ParentPackageUninstalled += ProjectChanged;
+ packageManagementEvents.ParentPackagesUpdated += ProjectChanged;
}
- void ProjectChanged(object sender, ParentPackageOperationEventArgs e)
+ void ProjectChanged(object sender, EventArgs e)
{
projectService.RefreshProjectBrowser();
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ProjectRootElementExtensions.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ProjectRootElementExtensions.cs
new file mode 100644
index 0000000000..25e7ec7a85
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/ProjectRootElementExtensions.cs
@@ -0,0 +1,19 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Linq;
+using Microsoft.Build.Construction;
+
+namespace ICSharpCode.PackageManagement
+{
+ public static class ProjectRootElementExtensions
+ {
+ public static ProjectImportElement FindImport(this ProjectRootElement rootElement, string importedProjectFile)
+ {
+ return rootElement
+ .Imports
+ .FirstOrDefault(import => String.Equals(import.Project, importedProjectFile, StringComparison.OrdinalIgnoreCase));
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ReducedPackageOperations.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ReducedPackageOperations.cs
new file mode 100644
index 0000000000..fbc5ac02c2
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/ReducedPackageOperations.cs
@@ -0,0 +1,52 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using NuGet;
+
+namespace ICSharpCode.PackageManagement
+{
+ public class ReducedPackageOperations
+ {
+ IPackageOperationResolver resolver;
+ IList operations;
+ IEnumerable packages;
+
+ public ReducedPackageOperations(IPackageOperationResolver resolver, IEnumerable packages)
+ {
+ this.resolver = resolver;
+ this.packages = packages;
+ this.operations = new List();
+ }
+
+ public IEnumerable Operations {
+ get { return operations; }
+ }
+
+ public void Reduce()
+ {
+ foreach (IPackage package in packages) {
+ if (!InstallOperationExists(package)) {
+ operations.AddRange(resolver.ResolveOperations(package));
+ }
+ }
+
+ operations = operations.Reduce();
+ }
+
+ bool InstallOperationExists(IPackage package)
+ {
+ var installOperation = new PackageOperation(package, PackageAction.Install);
+ return operations.Any(operation => IsMatch(installOperation, operation));
+ }
+
+ bool IsMatch(PackageOperation x, PackageOperation y)
+ {
+ return (x.Package.Id == y.Package.Id) &&
+ (x.Package.Version == y.Package.Version) &&
+ (x.Action == y.Action);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ResolveFileConflictEventArgs.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ResolveFileConflictEventArgs.cs
new file mode 100644
index 0000000000..bb75287bb4
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/ResolveFileConflictEventArgs.cs
@@ -0,0 +1,20 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using NuGet;
+
+namespace ICSharpCode.PackageManagement
+{
+ public class ResolveFileConflictEventArgs : EventArgs
+ {
+ public ResolveFileConflictEventArgs(string message)
+ {
+ this.Message = message;
+ this.Resolution = FileConflictResolution.Ignore;
+ }
+
+ public string Message { get; private set; }
+ public FileConflictResolution Resolution { get; set; }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/ConsoleHostFileConflictResolver.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/ConsoleHostFileConflictResolver.cs
new file mode 100644
index 0000000000..c8e4303ab0
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/ConsoleHostFileConflictResolver.cs
@@ -0,0 +1,44 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using NuGet;
+
+namespace ICSharpCode.PackageManagement.Scripting
+{
+ public class ConsoleHostFileConflictResolver : IConsoleHostFileConflictResolver
+ {
+ IPackageManagementEvents packageEvents;
+ FileConflictResolution conflictResolution;
+
+ public ConsoleHostFileConflictResolver(
+ IPackageManagementEvents packageEvents,
+ FileConflictAction fileConflictAction)
+ {
+ this.packageEvents = packageEvents;
+
+ conflictResolution = GetFileConflictResolution(fileConflictAction);
+ packageEvents.ResolveFileConflict += ResolveFileConflict;
+ }
+
+ void ResolveFileConflict(object sender, ResolveFileConflictEventArgs e)
+ {
+ e.Resolution = conflictResolution;
+ }
+
+ FileConflictResolution GetFileConflictResolution(FileConflictAction fileConflictAction)
+ {
+ switch (fileConflictAction) {
+ case FileConflictAction.Overwrite:
+ return FileConflictResolution.Overwrite;
+ default:
+ return FileConflictResolution.Ignore;
+ }
+ }
+
+ public void Dispose()
+ {
+ packageEvents.ResolveFileConflict -= ResolveFileConflict;
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/FileConflictAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/FileConflictAction.cs
new file mode 100644
index 0000000000..db4fdb2501
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/FileConflictAction.cs
@@ -0,0 +1,14 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+
+namespace ICSharpCode.PackageManagement.Scripting
+{
+ public enum FileConflictAction
+ {
+ None,
+ Overwrite,
+ Ignore
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/GlobalMSBuildProjectCollection.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/GlobalMSBuildProjectCollection.cs
new file mode 100644
index 0000000000..171049c177
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/GlobalMSBuildProjectCollection.cs
@@ -0,0 +1,96 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+using ICSharpCode.SharpDevelop.Project;
+using Microsoft.Build.Evaluation;
+using NuGet;
+
+namespace ICSharpCode.PackageManagement.Scripting
+{
+ public class GlobalMSBuildProjectCollection : IGlobalMSBuildProjectCollection
+ {
+ class GlobalAndInternalProject
+ {
+ public Project GlobalMSBuildProject;
+ public MSBuildBasedProject SharpDevelopMSBuildProject;
+ public int GlobalMSBuildProjectImportsCount;
+
+ public bool HasGlobalMSBuildProjectImportsChanged()
+ {
+ return GlobalMSBuildProjectImportsCount != GlobalMSBuildProject.Xml.Imports.Count;
+ }
+ }
+
+ List projects = new List();
+
+ PackageManagementLogger logger = new PackageManagementLogger(
+ new ThreadSafePackageManagementEvents(PackageManagementServices.PackageManagementEvents));
+
+ public void AddProject(IPackageManagementProject packageManagementProject)
+ {
+ AddProject(packageManagementProject.ConvertToDTEProject().MSBuildProject);
+ }
+
+ void AddProject(MSBuildBasedProject sharpDevelopProject)
+ {
+ Project globalProject = GetGlobalProjectCollection().LoadProject(sharpDevelopProject.FileName);
+
+ projects.Add(new GlobalAndInternalProject {
+ GlobalMSBuildProject = globalProject,
+ SharpDevelopMSBuildProject = sharpDevelopProject,
+ GlobalMSBuildProjectImportsCount = globalProject.Xml.Imports.Count
+ });
+ }
+
+ ProjectCollection GetGlobalProjectCollection()
+ {
+ return ProjectCollection.GlobalProjectCollection;
+ }
+
+ public void Dispose()
+ {
+ foreach (GlobalAndInternalProject msbuildProjects in projects) {
+ UpdateImports(msbuildProjects);
+ GetGlobalProjectCollection().UnloadProject(msbuildProjects.GlobalMSBuildProject);
+ }
+ }
+
+ void UpdateImports(GlobalAndInternalProject msbuildProjects)
+ {
+ if (!msbuildProjects.HasGlobalMSBuildProjectImportsChanged()) {
+ return;
+ }
+
+ LogProjectImportsChanged(msbuildProjects.SharpDevelopMSBuildProject);
+
+ var importsMerger = new MSBuildProjectImportsMerger(
+ msbuildProjects.GlobalMSBuildProject,
+ msbuildProjects.SharpDevelopMSBuildProject);
+
+ importsMerger.Merge();
+
+ LogProjectImportMergeResult(msbuildProjects.SharpDevelopMSBuildProject, importsMerger.Result);
+ }
+
+ void LogProjectImportsChanged(MSBuildBasedProject project)
+ {
+ logger.Log(
+ MessageLevel.Info,
+ "Project imports have been modified outside SharpDevelop for project '{0}'.",
+ project.Name);
+ }
+
+ void LogProjectImportMergeResult(MSBuildBasedProject project, MSBuildProjectImportsMergeResult result)
+ {
+ logger.Log(
+ MessageLevel.Info,
+ "Project import merge result for project '{0}':\r\n{1}",
+ project.Name,
+ result);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IConsoleHostFileConflictResolver.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IConsoleHostFileConflictResolver.cs
new file mode 100644
index 0000000000..44c586402f
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IConsoleHostFileConflictResolver.cs
@@ -0,0 +1,11 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+
+namespace ICSharpCode.PackageManagement.Scripting
+{
+ public interface IConsoleHostFileConflictResolver : IDisposable
+ {
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IGlobalMSBuildProjectCollection.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IGlobalMSBuildProjectCollection.cs
new file mode 100644
index 0000000000..f81c410431
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IGlobalMSBuildProjectCollection.cs
@@ -0,0 +1,12 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+
+namespace ICSharpCode.PackageManagement.Scripting
+{
+ public interface IGlobalMSBuildProjectCollection : IDisposable
+ {
+ void AddProject(IPackageManagementProject project);
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs
index 8a67d71534..17847c8f72 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs
@@ -26,6 +26,8 @@ namespace ICSharpCode.PackageManagement.Scripting
void SetDefaultRunspace();
+ IConsoleHostFileConflictResolver CreateFileConflictResolver(FileConflictAction fileConflictAction);
+
IPackageManagementProject GetProject(string packageSource, string projectName);
IPackageManagementProject GetProject(IPackageRepository sourceRepository, string projectName);
PackageSource GetActivePackageSource(string source);
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/MSBuildProjectImportsMergeResult.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/MSBuildProjectImportsMergeResult.cs
new file mode 100644
index 0000000000..ce7160ef1d
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/MSBuildProjectImportsMergeResult.cs
@@ -0,0 +1,56 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using ICSharpCode.SharpDevelop;
+using Microsoft.Build.Construction;
+
+namespace ICSharpCode.PackageManagement.Scripting
+{
+ public class MSBuildProjectImportsMergeResult
+ {
+ List projectImportsAdded = new List();
+ List projectImportsRemoved = new List();
+
+ public MSBuildProjectImportsMergeResult()
+ {
+ }
+
+ public IEnumerable ProjectImportsAdded {
+ get { return projectImportsAdded; }
+ }
+
+ public IEnumerable ProjectImportsRemoved {
+ get { return projectImportsRemoved; }
+ }
+
+ public override string ToString()
+ {
+ return String.Format(
+ "Imports added: {0}\r\nImports removed: {1}",
+ ImportsToString(projectImportsAdded),
+ ImportsToString(projectImportsRemoved));
+ }
+
+ static string ImportsToString(IEnumerable imports)
+ {
+ if (!imports.Any()) {
+ return String.Empty;
+ }
+
+ return String.Join(",\r\n", imports.Select(import => String.Format("'{0}'", import)));
+ }
+
+ public void AddProjectImportsRemoved(IEnumerable imports)
+ {
+ imports.ForEach(import => projectImportsRemoved.Add(import.Project));
+ }
+
+ public void AddProjectImportsAdded(IEnumerable imports)
+ {
+ imports.ForEach(import => projectImportsAdded.Add(import.Project));
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/MSBuildProjectImportsMerger.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/MSBuildProjectImportsMerger.cs
new file mode 100644
index 0000000000..b920f9bc00
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/MSBuildProjectImportsMerger.cs
@@ -0,0 +1,91 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using ICSharpCode.SharpDevelop.Project;
+using Microsoft.Build.Construction;
+using Microsoft.Build.Evaluation;
+using NuGet;
+
+namespace ICSharpCode.PackageManagement.Scripting
+{
+ public class MSBuildProjectImportsMerger
+ {
+ IPackageManagementProjectService projectService;
+ Project msbuildProject;
+ MSBuildBasedProject sharpDevelopProject;
+ MSBuildProjectImportsMergeResult result = new MSBuildProjectImportsMergeResult();
+
+ public MSBuildProjectImportsMerger(Project msbuildProject, MSBuildBasedProject sharpDevelopProject)
+ : this(msbuildProject, sharpDevelopProject, new PackageManagementProjectService())
+ {
+ }
+
+ public MSBuildProjectImportsMerger(
+ Project msbuildProject,
+ MSBuildBasedProject sharpDevelopProject,
+ IPackageManagementProjectService projectService)
+ {
+ this.msbuildProject = msbuildProject;
+ this.sharpDevelopProject = sharpDevelopProject;
+ this.projectService = projectService;
+ }
+
+ public MSBuildProjectImportsMergeResult Result {
+ get { return result; }
+ }
+
+ public void Merge()
+ {
+ int msbuildProjectImportCount = msbuildProject.Xml.Imports.Count;
+ lock (sharpDevelopProject.SyncRoot) {
+ int sharpDevelopProjectImportCount = sharpDevelopProject.MSBuildProjectFile.Imports.Count;
+ if (msbuildProjectImportCount > sharpDevelopProjectImportCount) {
+ AddNewImports();
+ } else if (msbuildProjectImportCount < sharpDevelopProjectImportCount) {
+ RemoveMissingImports();
+ }
+ }
+ }
+
+ void RemoveMissingImports()
+ {
+ var importsToRemove = new List();
+ lock (sharpDevelopProject.SyncRoot) {
+ foreach (ProjectImportElement import in sharpDevelopProject.MSBuildProjectFile.Imports) {
+ if (msbuildProject.Xml.FindImport(import.Project) == null) {
+ importsToRemove.Add(import);
+ }
+ }
+
+ foreach (ProjectImportElement importToRemove in importsToRemove) {
+ sharpDevelopProject.MSBuildProjectFile.RemoveChild(importToRemove);
+ }
+ }
+
+ result.AddProjectImportsRemoved(importsToRemove);
+
+ projectService.Save(sharpDevelopProject);
+ }
+
+ void AddNewImports()
+ {
+ var importsToAdd = new List();
+ foreach (ProjectImportElement import in msbuildProject.Xml.Imports) {
+ if (!sharpDevelopProject.ImportExists(import.Project)) {
+ importsToAdd.Add(import);
+ }
+ }
+
+ foreach (ProjectImportElement importToAdd in importsToAdd) {
+ sharpDevelopProject.AddImportIfMissing(importToAdd.Project, ProjectImportLocation.Bottom);
+ }
+
+ result.AddProjectImportsAdded(importsToAdd);
+
+ projectService.Save(sharpDevelopProject);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/NullGlobalMSBuildProjectCollection.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/NullGlobalMSBuildProjectCollection.cs
new file mode 100644
index 0000000000..f80c6d68db
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/NullGlobalMSBuildProjectCollection.cs
@@ -0,0 +1,18 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+
+namespace ICSharpCode.PackageManagement.Scripting
+{
+ public class NullGlobalMSBuildProjectCollection : IGlobalMSBuildProjectCollection
+ {
+ public void AddProject(IPackageManagementProject project)
+ {
+ }
+
+ public void Dispose()
+ {
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs
index 790133c5e8..e9c093c326 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs
@@ -19,12 +19,14 @@ namespace ICSharpCode.PackageManagement.Scripting
IPowerShellHostFactory powerShellHostFactory;
IPowerShellHost powerShellHost;
IPackageManagementAddInPath addinPath;
+ IPackageManagementEvents packageEvents;
int autoIndentSize = 0;
string prompt = "PM> ";
public PackageManagementConsoleHost(
IPackageManagementSolution solution,
IRegisteredPackageRepositories registeredRepositories,
+ IPackageManagementEvents packageEvents,
IPowerShellHostFactory powerShellHostFactory,
IPackageManagementAddInPath addinPath)
{
@@ -32,14 +34,17 @@ namespace ICSharpCode.PackageManagement.Scripting
this.registeredRepositories = registeredRepositories;
this.powerShellHostFactory = powerShellHostFactory;
this.addinPath = addinPath;
+ this.packageEvents = packageEvents;
}
public PackageManagementConsoleHost(
IPackageManagementSolution solution,
- IRegisteredPackageRepositories registeredRepositories)
+ IRegisteredPackageRepositories registeredRepositories,
+ IPackageManagementEvents packageEvents)
: this(
solution,
registeredRepositories,
+ packageEvents,
new PowerShellHostFactory(),
new PackageManagementAddInPath())
{
@@ -260,5 +265,10 @@ namespace ICSharpCode.PackageManagement.Scripting
{
powerShellHost.SetDefaultRunspace();
}
+
+ public IConsoleHostFileConflictResolver CreateFileConflictResolver(FileConflictAction fileConflictAction)
+ {
+ return new ConsoleHostFileConflictResolver(packageEvents, fileConflictAction);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHostProvider.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHostProvider.cs
index 489d491cb3..73ad4637f9 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHostProvider.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHostProvider.cs
@@ -12,22 +12,28 @@ namespace ICSharpCode.PackageManagement.Scripting
IRegisteredPackageRepositories registeredRepositories;
IPowerShellDetection powerShellDetection;
IPackageManagementConsoleHost consoleHost;
+ IPackageManagementEvents packageEvents;
public PackageManagementConsoleHostProvider(
IPackageManagementSolution solution,
IRegisteredPackageRepositories registeredRepositories)
- : this(solution, registeredRepositories, new PowerShellDetection())
+ : this(solution,
+ registeredRepositories,
+ new PowerShellDetection(),
+ PackageManagementServices.PackageManagementEvents)
{
}
public PackageManagementConsoleHostProvider(
IPackageManagementSolution solution,
IRegisteredPackageRepositories registeredRepositories,
- IPowerShellDetection powerShellDetection)
+ IPowerShellDetection powerShellDetection,
+ IPackageManagementEvents packageEvents)
{
this.solution = solution;
this.registeredRepositories = registeredRepositories;
this.powerShellDetection = powerShellDetection;
+ this.packageEvents = packageEvents;
}
public IPackageManagementConsoleHost ConsoleHost {
@@ -42,7 +48,7 @@ namespace ICSharpCode.PackageManagement.Scripting
void CreateConsoleHost()
{
if (powerShellDetection.IsPowerShell2Installed()) {
- consoleHost = new PackageManagementConsoleHost(solution, registeredRepositories);
+ consoleHost = new PackageManagementConsoleHost(solution, registeredRepositories, packageEvents);
} else {
consoleHost = new PowerShellMissingConsoleHost();
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellMissingConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellMissingConsoleHost.cs
index 0b7142231c..4d085ade49 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellMissingConsoleHost.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellMissingConsoleHost.cs
@@ -80,5 +80,10 @@ namespace ICSharpCode.PackageManagement.Scripting
public void SetDefaultRunspace()
{
}
+
+ public IConsoleHostFileConflictResolver CreateFileConflictResolver(FileConflictAction fileConflictAction)
+ {
+ return null;
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/RunAllProjectPackageScriptsAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/RunAllProjectPackageScriptsAction.cs
new file mode 100644
index 0000000000..8c47518c29
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/RunAllProjectPackageScriptsAction.cs
@@ -0,0 +1,168 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+using NuGet;
+
+namespace ICSharpCode.PackageManagement.Scripting
+{
+ public class RunAllProjectPackageScriptsAction : IDisposable
+ {
+ IPackageScriptRunner scriptRunner;
+ List projects;
+ IPackageScriptFactory scriptFactory;
+ IGlobalMSBuildProjectCollection projectCollection;
+
+ List> packageInstalledHandlers =
+ new List>();
+
+ List> packageReferenceAddedHandlers =
+ new List>();
+
+ List> packageReferenceRemovedHandlers =
+ new List>();
+
+ public RunAllProjectPackageScriptsAction(
+ IPackageScriptRunner scriptRunner,
+ IEnumerable projects)
+ : this(scriptRunner, projects, new PackageScriptFactory(), new GlobalMSBuildProjectCollection())
+ {
+ }
+
+ public RunAllProjectPackageScriptsAction(
+ IPackageScriptRunner scriptRunner,
+ IEnumerable projects,
+ IPackageScriptFactory scriptFactory,
+ IGlobalMSBuildProjectCollection projectCollection)
+ {
+ this.scriptRunner = scriptRunner;
+ this.projects = projects.ToList();
+ this.scriptFactory = scriptFactory;
+ this.projectCollection = projectCollection;
+
+ AddProjectsToGlobalCollection();
+ RegisterEvents();
+ }
+
+ public void Dispose()
+ {
+ IsDisposed = true;
+ UnregisterEvents();
+ projectCollection.Dispose();
+ }
+
+ public bool IsDisposed { get; private set; }
+
+ void AddProjectsToGlobalCollection()
+ {
+ foreach (IPackageManagementProject project in projects) {
+ projectCollection.AddProject(project);
+ }
+ }
+
+ void RegisterEvents()
+ {
+ foreach (IPackageManagementProject project in projects) {
+ RegisterPackageInstalledEvent(project);
+ RegisterPackageReferenceAddedEvent(project);
+ RegisterPackageReferenceRemovedEvent(project);
+ }
+ }
+
+ void RegisterPackageInstalledEvent(IPackageManagementProject project)
+ {
+ EventHandler installHandler =
+ (_, e) => PackageInstalled(project, e);
+ packageInstalledHandlers.Add(installHandler);
+ project.PackageInstalled += installHandler;
+ }
+
+ void RegisterPackageReferenceAddedEvent(IPackageManagementProject project)
+ {
+ EventHandler referenceAddedHandler =
+ (_, e) => PackageReferenceAdded(project, e);
+ packageReferenceAddedHandlers.Add(referenceAddedHandler);
+ project.PackageReferenceAdded += referenceAddedHandler;
+ }
+
+ void RegisterPackageReferenceRemovedEvent(IPackageManagementProject project)
+ {
+ EventHandler referenceRemovedHandler =
+ (_, e) => PackageReferenceRemoved(project, e);
+ packageReferenceRemovedHandlers.Add(referenceRemovedHandler);
+ project.PackageReferenceRemoved += referenceRemovedHandler;
+ }
+
+ void UnregisterEvents()
+ {
+ foreach (IPackageManagementProject project in projects) {
+ UnregisterPackageInstalledEvent(project);
+ UnregisterPackageReferenceAddedEvent(project);
+ UnregisterPackageReferenceRemovedEvent(project);
+ }
+ }
+
+ void UnregisterPackageInstalledEvent(IPackageManagementProject project)
+ {
+ EventHandler handler = packageInstalledHandlers.First();
+ packageInstalledHandlers.Remove(handler);
+ project.PackageInstalled -= handler;
+ }
+
+ void UnregisterPackageReferenceAddedEvent(IPackageManagementProject project)
+ {
+ EventHandler handler = packageReferenceAddedHandlers.First();
+ packageReferenceAddedHandlers.Remove(handler);
+ project.PackageReferenceAdded -= handler;
+ }
+
+ void UnregisterPackageReferenceRemovedEvent(IPackageManagementProject project)
+ {
+ EventHandler handler = packageReferenceRemovedHandlers.First();
+ packageReferenceRemovedHandlers.Remove(handler);
+ project.PackageReferenceRemoved -= handler;
+ }
+
+ void PackageInstalled(IPackageManagementProject project, PackageOperationEventArgs e)
+ {
+ RunInitScript(project, e);
+ }
+
+ void PackageReferenceAdded(IPackageManagementProject project, PackageOperationEventArgs e)
+ {
+ RunInstallScript(project, e);
+ }
+
+ void PackageReferenceRemoved(IPackageManagementProject project, PackageOperationEventArgs e)
+ {
+ RunUninstallScript(project, e);
+ }
+
+ void RunInitScript(IPackageManagementProject project, PackageOperationEventArgs e)
+ {
+ IPackageScript script = scriptFactory.CreatePackageInitializeScript(e.Package, e.InstallPath);
+ RunScript(project, script);
+ }
+
+ void RunScript(IPackageManagementProject project, IPackageScript script)
+ {
+ script.Project = project;
+ scriptRunner.Run(script);
+ }
+
+ void RunInstallScript(IPackageManagementProject project, PackageOperationEventArgs e)
+ {
+ IPackageScript script = scriptFactory.CreatePackageInstallScript(e.Package, e.InstallPath);
+ RunScript(project, script);
+ }
+
+ void RunUninstallScript(IPackageManagementProject project, PackageOperationEventArgs e)
+ {
+ IPackageScript script = scriptFactory.CreatePackageUninstallScript(e.Package, e.InstallPath);
+ RunScript(project, script);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/RunPackageScriptsAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/RunPackageScriptsAction.cs
index 81245d4ada..7d3e1a8265 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/RunPackageScriptsAction.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/RunPackageScriptsAction.cs
@@ -11,23 +11,27 @@ namespace ICSharpCode.PackageManagement.Scripting
IPackageManagementProject project;
IPackageScriptFactory scriptFactory;
IPackageScriptRunner scriptRunner;
+ IGlobalMSBuildProjectCollection projectCollection;
public RunPackageScriptsAction(
IPackageScriptRunner scriptRunner,
IPackageManagementProject project)
- : this(project, scriptRunner, new PackageScriptFactory())
+ : this(project, scriptRunner, new PackageScriptFactory(), new GlobalMSBuildProjectCollection())
{
}
public RunPackageScriptsAction(
IPackageManagementProject project,
IPackageScriptRunner scriptRunner,
- IPackageScriptFactory scriptFactory)
+ IPackageScriptFactory scriptFactory,
+ IGlobalMSBuildProjectCollection projectCollection)
{
this.project = project;
this.scriptRunner = scriptRunner;
this.scriptFactory = scriptFactory;
+ this.projectCollection = projectCollection;
+ projectCollection.AddProject(project);
RegisterEvents();
}
@@ -88,6 +92,7 @@ namespace ICSharpCode.PackageManagement.Scripting
{
IsDisposed = true;
UnregisterEvents();
+ projectCollection.Dispose();
}
public bool IsDisposed { get; private set; }
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/SelectProjectsService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/SelectProjectsService.cs
index c846ca9077..dd4fc7eb1c 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/SelectProjectsService.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/SelectProjectsService.cs
@@ -10,24 +10,13 @@ using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.PackageManagement
{
- public class SelectProjectsService : ISelectProjectsService
+ public class SelectProjectsService : ServiceWithWorkbenchOwner, ISelectProjectsService
{
- Window owner;
-
- public Window Owner {
- get {
- if (owner == null) {
- owner = SD.Workbench.MainWindow;
- }
- return owner;
- }
- set { owner = value; }
- }
public bool SelectProjects(IEnumerable projects)
{
SelectProjectsView view = CreateSelectProjectsView(projects);
- return view.ShowDialog() ?? false;
+ return view.ShowDialog() ?? false;
}
SelectProjectsView CreateSelectProjectsView(IEnumerable projects)
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ServiceWithWorkbenchOwner.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ServiceWithWorkbenchOwner.cs
new file mode 100644
index 0000000000..e8d67c070b
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/ServiceWithWorkbenchOwner.cs
@@ -0,0 +1,24 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Windows;
+using ICSharpCode.SharpDevelop.Gui;
+
+namespace ICSharpCode.PackageManagement
+{
+ public class ServiceWithWorkbenchOwner
+ {
+ Window owner;
+
+ public Window Owner {
+ get {
+ if (owner == null) {
+ owner = WorkbenchSingleton.MainWindow;
+ }
+ return owner;
+ }
+ set { owner = value; }
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopCredentialProvider.cs b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopCredentialProvider.cs
new file mode 100644
index 0000000000..c8ce205cb8
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopCredentialProvider.cs
@@ -0,0 +1,18 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Net;
+using NuGet;
+
+namespace ICSharpCode.PackageManagement
+{
+ public class SharpDevelopCredentialProvider : ICredentialProvider
+ {
+ public ICredentials GetCredentials(Uri uri, IWebProxy proxy, CredentialType credentialType, bool retrying)
+ {
+ return null;
+ }
+ }
+}
+
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManager.cs b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManager.cs
index 8c57066725..d3507c1b1e 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManager.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManager.cs
@@ -66,9 +66,7 @@ namespace ICSharpCode.PackageManagement
public void InstallPackage(IPackage package, InstallPackageAction installAction)
{
- foreach (PackageOperation operation in installAction.Operations) {
- Execute(operation);
- }
+ RunPackageOperations(installAction.Operations);
AddPackageReference(package, installAction.IgnoreDependencies, installAction.AllowPrereleaseVersions);
}
@@ -119,15 +117,53 @@ namespace ICSharpCode.PackageManagement
public void UpdatePackage(IPackage package, UpdatePackageAction updateAction)
{
- foreach (PackageOperation operation in updateAction.Operations) {
- Execute(operation);
- }
+ RunPackageOperations(updateAction.Operations);
UpdatePackageReference(package, updateAction);
}
- void UpdatePackageReference(IPackage package, UpdatePackageAction updateAction)
+ public void UpdatePackageReference(IPackage package, IUpdatePackageSettings settings)
+ {
+ UpdatePackageReference(package, settings.UpdateDependencies, settings.AllowPrereleaseVersions);
+ }
+
+ void UpdatePackageReference(IPackage package, bool updateDependencies, bool allowPrereleaseVersions)
{
- ProjectManager.UpdatePackageReference(package.Id, package.Version, updateAction.UpdateDependencies, updateAction.AllowPrereleaseVersions);
+ ProjectManager.UpdatePackageReference(package.Id, package.Version, updateDependencies, allowPrereleaseVersions);
+ }
+
+ public void UpdatePackages(UpdatePackagesAction updateAction)
+ {
+ RunPackageOperations(updateAction.Operations);
+ foreach (IPackage package in updateAction.Packages) {
+ UpdatePackageReference(package, updateAction);
+ }
+ }
+
+ public IEnumerable GetUpdatePackageOperations(
+ IEnumerable packages,
+ IUpdatePackageSettings settings)
+ {
+ IPackageOperationResolver resolver = CreateUpdatePackageOperationResolver(settings);
+
+ var reducedOperations = new ReducedPackageOperations(resolver, packages);
+ reducedOperations.Reduce();
+ return reducedOperations.Operations;
+ }
+
+ IPackageOperationResolver CreateUpdatePackageOperationResolver(IUpdatePackageSettings settings)
+ {
+ return packageOperationResolverFactory.CreateUpdatePackageOperationResolver(
+ LocalRepository,
+ SourceRepository,
+ Logger,
+ settings);
+ }
+
+ public void RunPackageOperations(IEnumerable operations)
+ {
+ foreach (PackageOperation operation in operations) {
+ Execute(operation);
+ }
}
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectManager.cs b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectManager.cs
index cf190ea759..cec446ec40 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectManager.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectManager.cs
@@ -21,5 +21,12 @@ namespace ICSharpCode.PackageManagement
{
return LocalRepository.Exists(packageId);
}
+
+ public bool HasOlderPackageInstalled(IPackage package)
+ {
+ IPackage installedPackage = LocalRepository.FindPackage(package.Id);
+ return (installedPackage != null) &&
+ (installedPackage.Version < package.Version);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs
index 2839256f64..946fd83d46 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs
@@ -5,8 +5,11 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Versioning;
+
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
+using ICSharpCode.SharpDevelop.Dom;
+using ICSharpCode.SharpDevelop.Parser;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
@@ -112,7 +115,8 @@ namespace ICSharpCode.PackageManagement
{
string referenceName = GetReferenceName(name);
foreach (ReferenceProjectItem referenceProjectItem in project.GetItemsOfType(ItemType.Reference)) {
- if (IsMatchIgnoringCase(referenceProjectItem.Include, referenceName)) {
+ var assemblyName = new DomAssemblyName(referenceProjectItem.Include);
+ if (IsMatchIgnoringCase(assemblyName.ShortName, referenceName)) {
return referenceProjectItem;
}
}
@@ -187,10 +191,13 @@ namespace ICSharpCode.PackageManagement
public override void AddFile(string path, Stream stream)
{
PhysicalFileSystemAddFile(path, stream);
- if (ShouldAddFileToProject(path)) {
- AddFileToProject(path);
- }
- LogAddedFileToProject(path);
+ AddFileToProject(path);
+ }
+
+ public override void AddFile(string path, Action writeToStream)
+ {
+ PhysicalFileSystemAddFile(path, writeToStream);
+ AddFileToProject(path);
}
protected virtual void PhysicalFileSystemAddFile(string path, Stream stream)
@@ -198,6 +205,19 @@ namespace ICSharpCode.PackageManagement
base.AddFile(path, stream);
}
+ protected virtual void PhysicalFileSystemAddFile(string path, Action writeToStream)
+ {
+ base.AddFile(path, writeToStream);
+ }
+
+ void AddFileToProject(string path)
+ {
+ if (ShouldAddFileToProject(path)) {
+ AddFileProjectItemToProject(path);
+ }
+ LogAddedFileToProject(path);
+ }
+
bool ShouldAddFileToProject(string path)
{
return !IsBinDirectory(path) && !FileExistsInProject(path);
@@ -209,13 +229,13 @@ namespace ICSharpCode.PackageManagement
return IsMatchIgnoringCase(directoryName, "bin");
}
- bool FileExistsInProject(string path)
+ public bool FileExistsInProject(string path)
{
string fullPath = GetFullPath(path);
return project.IsFileInProject(FileName.Create(fullPath));
}
- void AddFileToProject(string path)
+ void AddFileProjectItemToProject(string path)
{
FileProjectItem fileItem = CreateFileProjectItem(path);
projectService.AddProjectItem(project, fileItem);
@@ -300,5 +320,31 @@ namespace ICSharpCode.PackageManagement
{
return path;
}
+
+ public void AddImport(string targetPath, ProjectImportLocation location)
+ {
+ string relativeTargetPath = GetRelativePath(targetPath);
+ project.AddImportIfMissing(relativeTargetPath, location);
+ ReevaluateProjectIfNecessary();
+ projectService.Save(project);
+ }
+
+ string GetRelativePath(string path)
+ {
+ return FileUtility.GetRelativePath(project.Directory, path);
+ }
+
+ public void RemoveImport(string targetPath)
+ {
+ string relativeTargetPath = GetRelativePath(targetPath);
+ project.RemoveImport(relativeTargetPath);
+ ReevaluateProjectIfNecessary();
+ projectService.Save(project);
+ }
+
+ protected virtual void ReevaluateProjectIfNecessary()
+ {
+ project.ReevaluateIfNecessary();
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ThreadSafePackageManagementEvents.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ThreadSafePackageManagementEvents.cs
index af756e42fa..36db0c32ea 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/ThreadSafePackageManagementEvents.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/ThreadSafePackageManagementEvents.cs
@@ -33,6 +33,7 @@ namespace ICSharpCode.PackageManagement
unsafeEvents.PackageOperationError += RaisePackageOperationErrorEventIfHasSubscribers;
unsafeEvents.ParentPackageInstalled += RaiseParentPackageInstalledEventIfHasSubscribers;
unsafeEvents.ParentPackageUninstalled += RaiseParentPackageUninstalledEventIfHasSubscribers;
+ unsafeEvents.ParentPackagesUpdated += RaiseParentPackagesUpdatedEventIfHasSubscribers;
}
public void Dispose()
@@ -46,6 +47,7 @@ namespace ICSharpCode.PackageManagement
unsafeEvents.PackageOperationError -= RaisePackageOperationErrorEventIfHasSubscribers;
unsafeEvents.ParentPackageInstalled -= RaiseParentPackageInstalledEventIfHasSubscribers;
unsafeEvents.ParentPackageUninstalled -= RaiseParentPackageUninstalledEventIfHasSubscribers;
+ unsafeEvents.ParentPackagesUpdated -= RaiseParentPackagesUpdatedEventIfHasSubscribers;
}
void RaisePackageOperationStartingEventIfHasSubscribers(object sender, EventArgs e)
@@ -74,6 +76,11 @@ namespace ICSharpCode.PackageManagement
workbench.SafeThreadAsyncCall(method, arg1, arg2);
}
+ R SafeThreadFunction(Func method)
+ {
+ return workbench.SafeThreadFunction(method);
+ }
+
public event EventHandler PackageOperationsStarting;
void RaisePackageOperationErrorEventIfHasSubscribers(object sender, PackageOperationExceptionEventArgs e)
@@ -184,5 +191,39 @@ namespace ICSharpCode.PackageManagement
{
return unsafeEvents.OnSelectProjects(selectedProjects);
}
+
+ public event EventHandler ResolveFileConflict {
+ add { unsafeEvents.ResolveFileConflict += value; }
+ remove { unsafeEvents.ResolveFileConflict -= value; }
+ }
+
+ public FileConflictResolution OnResolveFileConflict(string message)
+ {
+ return unsafeEvents.OnResolveFileConflict(message);
+ }
+
+ public event EventHandler ParentPackagesUpdated;
+
+ public void OnParentPackagesUpdated(IEnumerable packages)
+ {
+ unsafeEvents.OnParentPackagesUpdated(packages);
+ }
+
+ void RaiseParentPackagesUpdatedEventIfHasSubscribers(object sender, ParentPackagesOperationEventArgs e)
+ {
+ if (ParentPackagesUpdated != null) {
+ RaiseParentPackagesUpdatedEvent(sender, e);
+ }
+ }
+
+ void RaiseParentPackagesUpdatedEvent(object sender, ParentPackagesOperationEventArgs e)
+ {
+ if (InvokeRequired) {
+ Action