DelftShell Build Logica.
Hieronder staat de build logica beschreven van DelftShell. Wees vrij om wijzigen etc aan te brengen zodat dit document kan worden opgenomen in referentie materiaal. Hieronder staat een voorstel voor een nieuw build proces en ook hier zijn suggesties om het simpeler of sneller te maken natuurlijk nodig.
Martijn
Voor het builden van DelftShell inclusief plugins wordt nu gebruikt gemaakt van een aantal shared libraries en post-build events. Dit document probeert zo helder mogelijk het proces van builden en creëren van een 'loader' te beschrijven.
delft-tools\lib(1)
delft-tools\apps\DelftShell\modules\DelftShell.Loader\bin\Debug
delft-tools\apps\DelftShell\modules\DelftShell.Loader\bin\plugins(5)
delft-tools\apps\DelftShell\lib(2)
delft-tools\apps\DelftShellPlugins
delft-tools\apps\DelftShellPlugins\NetCdf
delft-tools\apps\DelftShellPlugins\NetCdf\lib(3)
delft-tools\apps\DelftShellPlugins\NetCdf\modules\
delft-tools\apps\DelftShellPlugins\NetCdf\modules\NetCDF\bin\Debug(4)
De lib directories (1,2,3) zijn er voor om 3rd party dlls te herbergen. NB: waarom lib (2)?
Allereerst worden onafhankelijke dlls (Bijvoorbeeld GeoApi.dll) gebuild met eventueel PostSharp post-build actie. Deze dll worden gereferenced door ander projecten.
De meer interessante projecten zijn de plugins en de loader.
1 Build plugins
1.1 Build plugin
1.2 Run postbuild events voor deze plugin
1.2.1 Run PostSharpPostBuild.cmd (\\bin\PostSharpPostBuild.cmd)
1.2.1.1 TODO: specify what this .cmd does
1.2.2 Run plugin PostBuild.cmd (\\bin\PluginPostBuild.cmd)
1.2.2.1 Creëer directory voor plugin in de loader\bin\plugins
1.2.2.2 Copieer alle dlls uit bin directory van plugin(4) naar bin\plugin directory binnen de loader(5).
1.2.2.3 Copieer alle dll.config files uit bin directory van plugin naar bin\plugin directory binnen de loader.
1.2.2.4 Verwijder bepaalde dlls als ze bestaan.(de lijst van welke is lang en staat in de .cmd file).
1.2.3 Doe plugin specifieke logica. Bijvoorbeeld: plugins.SharpMapGis kopieert alle bestanden uit de root lib (2) naar de plugin dir (5) binnen de loader en kopieert daarna nog van alles.
2 Build loader
2.1 Build de loader
2.2 Run postbuild events van de loader
2.2.1 Verwijder Nhibernate.dlls als deze er zijn.
2.2.2 Verwijder NetTopologySuite.dlls als deze er zijn.
2.2.3 Copieer een paar dllls uit de hoofd lib dir naar de build directory.
Problemen huidige structuur:
1 Verschillende build acties voor verschillende plugins. Kopieeer acties voor specifieke plugin slecht gedocumenteerd.
2 PostSharpPostBuild doet veel (onnodige?) kopieeracties.
3 3 lib directories! (1 voor plugins 1 voor shared kan ik begrijpen) waarvan men moet bijhouden wat waar wordt gebruikt.
Voorstel nieuwe structuur:
KISS.
Doel maak het simpeler en reduceer het aantal kopieer acties.
Veranderingen:
1 Plugin kopieert zichzelf naar bin van de loader (zonder subdir) en kijkt of afhankelijke dlls ook moeten worden gekopieerd (if !Exists copy op de hele bin van de plugin). Een grote bak met alle dlls dus.En geen specificatie van file-names in postbuild event.
2 PostSharp kan misschien sneller (zonder kopieer acties)
3 Geen extra acties binnen build loader.
4 Verwijder overbodige lib directory (2)
5 Split projecten zodat er minder vaak gebuild hoeft te worden
1 Build plugin
1.1 Build plugin
1.2 Run postbuild voor plugin
1.2.1 Run PostSharpPostBuild
1.2.2 Kopieer inhoud van bin directory van plugin naar bin van de loader. Doe dit alleen voor non-existing files.
2 Build loader
2.1 Run Postbuild events van de loader
9 Comments
Unknown User (don)
1. Copying all into loader/bin/ - won't make things faster, but certainly much less simple, what can really help is adding check in PluginPostBuild.cmd: foreach dll in plugin TargetDir, if dll exists in loader/bin - do nothing, otherwise copy dll to loader/bin/<plugin-name>/.
Having plugins in a separate directories is absolute a must, otherwise
When current structure appeared - KISS, YAGNI, etc. principles were used as well , but also
If we put all in one directory - we will violate "... while still being easy to understand." principle.
Note that all dlls in <plugin>/lib/ are supposed to be used only by one plugin, in this case they should be copied only once to the target loader/bin/<plugin> directory. Otherwise they can be moved to the top-level lib/ and then from there they should be also copied only once. So I won't expect any speed-ups there. Digg more .
2. improve PostSharp: sounds like a good option, I added copy action since there were conflicts between PostSharp and VS, maybe it is already fixed.
Also we should probably remove PostSharp interception of fields - this probably also makes compilation slower, plus run-time as well.
3. Geen extra acties binnen build loader - also sounds fine, except 1 time copy of all dlls from top-level lib. Loader bin/Debug currently contains only DelftShell and (1) libraries shared by any other component like DelftShell, DelftTools or any plugin and everything there is loaded during system start-up.
Any other copy/delete actions there must be gone.
4. DelftShell/lib - can be removed, it won't change anything. lib is there from old version where it contained many things, now they're move to plugins. DelftShell is just another component, like any plugin project (README.txt):
5. yep, dependencies should be reduced, we should analyze dependencies and decouple things a little (not too much). For example DelftTools.DataObjects depends on GeoAPI.dll which doesn't change much, but also on NTS and NTS.Extensions - that's not necessary, if we will use GeometryFactory - this dependency can be removed. There are probably other examples as well. Actions:
Current order of project builds is (from NDepend):
Now I'm doing a small test building DelftTools.DataObjects.Functions.Test and getting the output below (takes 4sec which is good enouth?), some things there maybe can be reduced, e.g. gui why does it run sgen.exe???:
_
------ Build started: Project: DelftTools.Utils, Configuration: Debug Any CPU ------
DelftTools.Utils -> D:\src\DelftTools\apps\DelftTools\modules\DelftTools.Utils\bin\Debug\DelftTools.Utils.dll
------ Build started: Project: DelftTools.Units, Configuration: Debug Any CPU ------
DelftTools.Units -> D:\src\DelftTools\apps\DelftTools\modules\DelftTools.Units\bin\Debug\DelftTools.Units.dll
------ Build started: Project: GeoAPI, Configuration: Debug Any CPU ------
GeoAPI -> D:\src\DelftTools\apps\DelftShellPlugins\SharpMapGis\modules\GeoAPI\bin\Debug\GeoAPI.dll
------ Build started: Project: DelftTools.DataObjects.Functions, Configuration: Debug Any CPU ------
DelftTools.DataObjects.Functions -> D:\src\DelftTools\apps\DelftTools\modules\DelftTools.DataObjects.Function\bin\Debug\DelftTools.DataObjects.Functions.dll
------ Build started: Project: GeoAPI.Extensions, Configuration: Debug Any CPU ------
GeoAPI.Extensions -> D:\src\DelftTools\apps\DelftShellPlugins\SharpMapGis\modules\GeoAPI.Extensions\bin\Debug\GeoAPI.Extensions.dll
------ Build started: Project: NetTopologySuite, Configuration: Debug Any CPU ------
NetTopologySuite -> D:\src\DelftTools\apps\DelftShellPlugins\SharpMapGis\modules\NetTopologySuite\bin\Debug\NetTopologySuite.dll
------ Build started: Project: DelftTools.Core, Configuration: Debug Any CPU ------
DelftTools.Core -> D:\src\DelftTools\apps\DelftTools\modules\DelftTools.Core\bin\Debug\DelftTools.Core.dll
------ Build started: Project: DelftTools.DataObjects, Configuration: Debug Any CPU ------
DelftTools.DataObjects -> D:\src\DelftTools\apps\DelftTools\modules\DelftTools.DataObjects\bin\Debug\DelftTools.DataObjects.dll
------ Build started: Project: DelftTools.Gui, Configuration: Debug Any CPU ------
C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\sgen.exe /assembly:\src\DelftTools\apps\DelftTools\modules\DelftTools.Gui\obj\Debug\DelftTools.Gui.dll /proxytypes /reference:\src\DelftTools\apps\DelftTools\modules\DelftTools.Core\bin\Debug\DelftTools.Core.dll /reference:\src\DelftTools\apps\DelftTools\modules\DelftTools.DataObjects\bin\Debug\DelftTools.DataObjects.dll /reference:\src\DelftTools\apps\DelftTools\modules\DelftTools.Utils\bin\Debug\DelftTools.Utils.dll /reference:..\..\..\..\lib\log4net.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.configuration.dll /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /compiler:/keyfile:DelftTools.snk
DelftTools.Gui -> D:\src\DelftTools\apps\DelftTools\modules\DelftTools.Gui\bin\Debug\DelftTools.Gui.dll
------ Build started: Project: DelftTools.Gui.Swf.Controls, Configuration: Debug Any CPU ------
DelftTools.Gui.Swf.Controls -> D:\src\DelftTools\apps\DelftTools\modules\DelftTools.Gui.Swf.Controls\bin\Debug\DelftTools.Gui.Swf.Controls.dll
------ Build started: Project: NetTopologySuite.Extensions, Configuration: Debug Any CPU ------
NetTopologySuite.Extensions -> D:\src\DelftTools\apps\DelftShellPlugins\SharpMapGis\modules\NetTopologySuite.Extensions\bin\Debug\NetTopologySuite.Extensions.dll
------ Build started: Project: SharpMap, Configuration: Debug Any CPU ------
SharpMap -> D:\src\DelftTools\apps\DelftShellPlugins\SharpMapGis\modules\SharpMap\bin\Debug\SharpMap.dll
------ Build started: Project: SharpMap.Extensions, Configuration: Debug Any CPU ------
SharpMap.Extensions -> D:\src\DelftTools\apps\DelftShellPlugins\SharpMapGis\modules\SharpMap.Extensions\bin\Debug\SharpMap.Extensions.dll
------ Build started: Project: SharpMap.UI, Configuration: Debug Any CPU ------
SharpMap.UI -> D:\src\DelftTools\apps\DelftShellPlugins\SharpMapGis\modules\SharpMap.UI\bin\Debug\SharpMap.UI.dll
------ Build started: Project: DelftTools.TestUtils, Configuration: Debug Any CPU ------
DelftTools.TestUtils -> D:\src\DelftTools\apps\DelftTools\tests\DelftTools.TestUtils\bin\Debug\DelftTools.TestUtils.dll
------ Build started: Project: DelftTools.DataObjects.Functions.Tests, Configuration: Debug Any CPU ------
DelftTools.DataObjects.Functions.Tests -> D:\src\DelftTools\apps\DelftTools\tests\DelftTools.DataObjects.Functions.Tests\bin\Debug\DelftTools.DataObjects.Functions.Tests.dll
========== Build: 16 succeeded or up-to-date, 0 failed, 0 skipped ==========
_
Unknown User (don)
Assemblies Dependencies
Assembly
Depends on...*
Is referenced by...*
DelftTools.Utils v1.0.0.0
mscorlib v2.0.0.0 ; PostSharp.Laos v1.0.0.0 ; System v2.0.0.0 ; System.Xml v2.0.0.0 ;log4net v1.2.10.0 ; System.Data v2.0.0.0 ; System.Core v3.5.0.0 ; PostSharp.Public v1.0.0.0; NDepend.Helpers.FileDirectoryPath v1.0.0.0 ; ICSharpCode.SharpZipLib v0.85.1.271 ;
DelftShell.Gui v1.0.0.0 ; DelftShell.Core v1.1.0.0 ; DelftTools.Core v1.0.0.0 ;DelftTools.DataObjects v1.0.0.0 ; DelftTools.Gui v1.0.0.0 ; DelftTools.DataObjects.Functions v1.0.0.0 ; DelftTools.Units v1.0.0.0 ; DelftTools.Gui.Swf.Controls v1.0.0.0 ; GeoAPI.Extensions v1.0.0.0 ; DelftShell.Plugins.CommonTools v1.0.0.0 ; DelftShell.Plugins.Data.NHibernate v1.0.0.0 ;DelftShell.Plugins.DelftModels.FlowModel v1.0.0.0 ; DelftShell.Plugins.NetCDF v1.0.0.0 ;SharpMap.Extensions v0.9.3385.26911 ; SharpMap.UI v0.9.3385.26925 ;DelftShell.Plugins.DeveloperTools v1.0.0.0 ; DelftShell.Plugins.ImportExport v1.0.0.0 ;DelftShell.Plugins.ProjectExplorer v1.0.0.0 ; DelftShell.Plugins.SharpMapGis v1.0.0.0 ;DelftShell.Plugins.NetworkEditor v1.0.0.0 ; NetTopologySuite.Extensions v1.0.0.0 ; SharpMap v0.9.3385.26896 ;
DelftTools.Units v1.0.0.0
mscorlib v2.0.0.0 ; DelftTools.Utils v1.0.0.0 ;
DelftShell.Core v1.1.0.0 ; DelftTools.Core v1.0.0.0 ; DelftTools.DataObjects v1.0.0.0 ;DelftTools.DataObjects.Functions v1.0.0.0 ; DelftShell.Plugins.DelftModels.FlowModel v1.0.0.0 ;DelftShell.Plugins.UdUnits v1.0.0.0 ; DelftShell.Plugins.NetworkEditor v1.0.0.0 ;
DelftTools.Core v1.0.0.0
DelftTools.Utils v1.0.0.0 ; mscorlib v2.0.0.0 ; System v2.0.0.0 ; DelftTools.Units v1.0.0.0 ;System.Drawing v2.0.0.0 ; log4net v1.2.10.0 ; PostSharp.Public v1.0.0.0 ; PostSharp.Laos v1.0.0.0 ;
DelftShell.Gui v1.0.0.0 ; DelftShell.Core v1.1.0.0 ; DelftTools.Gui v1.0.0.0 ;DelftShell.Plugins.CommonTools v1.0.0.0 ; DelftShell.Plugins.Data.NHibernate v1.0.0.0 ;DelftShell.Plugins.DelftModels.FlowModel v1.0.0.0 ; DelftShell.Plugins.NetCDF v1.0.0.0 ;DelftShell.Plugins.DeveloperTools v1.0.0.0 ; DelftShell.Plugins.ImportExport v1.0.0.0 ;DelftShell.Plugins.ProjectExplorer v1.0.0.0 ; DelftShell.Plugins.SharpMapGis v1.0.0.0 ;DelftShell.Plugins.NetworkEditor v1.0.0.0 ;
DelftTools.Gui v1.0.0.0
System v2.0.0.0 ; mscorlib v2.0.0.0 ; System.Drawing v2.0.0.0 ; DelftTools.Core v1.0.0.0 ;log4net v1.2.10.0 ; DelftTools.Utils v1.0.0.0 ; System.Xml v2.0.0.0 ;
DelftShell.Gui v1.0.0.0 ; DelftShell.Loader v1.0.0.0 ; DelftTools.Gui.Swf.Controls v1.0.0.0 ;DelftShell.Plugins.CommonTools v1.0.0.0 ; DelftShell.Plugins.DelftModels.FlowModel v1.0.0.0 ;DelftShell.Plugins.DeveloperTools v1.0.0.0 ; DelftShell.Plugins.ImportExport v1.0.0.0 ;DelftShell.Plugins.ProjectExplorer v1.0.0.0 ; DelftShell.Plugins.SharpMapGis v1.0.0.0 ;DelftShell.Plugins.NetworkEditor v1.0.0.0 ;
DelftTools.Gui.Swf.Controls v1.0.0.0
DelftTools.Utils v1.0.0.0 ; mscorlib v2.0.0.0 ; DelftTools.Gui v1.0.0.0 ; TeeChart v3.5.3225.32184 ; System.Windows.Forms v2.0.0.0 ; System v2.0.0.0 ; System.Drawing v2.0.0.0 ; System.Design v2.0.0.0 ; log4net v1.2.10.0 ; System.Data v2.0.0.0 ;DevComponents.DotNetBar v7.7.0.0 ; DevExpress.XtraEditors.v8.2 v8.2.4.0 ;DevExpress.XtraGrid.v8.2 v8.2.4.0 ; DevExpress.Data.v8.2 v8.2.4.0 ; DevExpress.Utils.v8.2 v8.2.4.0 ; PostSharp.Public v1.0.0.0 ; PostSharp.Laos v1.0.0.0 ;
DelftShell.Gui v1.0.0.0 ; DelftShell.Plugins.DelftModels.FlowModel v1.0.0.0 ;DelftShell.Plugins.ProjectExplorer v1.0.0.0 ; DelftShell.Plugins.SharpMapGis v1.0.0.0 ;DelftShell.Plugins.NetworkEditor v1.0.0.0 ; SharpMap v0.9.3385.26896 ;
DelftTools.DataObjects.Functions v1.0.0.0
System v2.0.0.0 ; mscorlib v2.0.0.0 ; DelftTools.Utils v1.0.0.0 ; log4net v1.2.10.0 ;DelftTools.Units v1.0.0.0 ; System.Core v3.5.0.0 ; PostSharp.Public v1.0.0.0 ;PostSharp.Laos v1.0.0.0 ;
DelftTools.DataObjects v1.0.0.0 ; GeoAPI.Extensions v1.0.0.0 ;DelftShell.Plugins.DelftModels.FlowModel v1.0.0.0 ; DelftShell.Plugins.NetCDF v1.0.0.0 ;SharpMap.Extensions v0.9.3385.26911 ; SharpMap.UI v0.9.3385.26925 ;DelftShell.Plugins.DeveloperTools v1.0.0.0 ; DelftShell.Plugins.SharpMapGis v1.0.0.0 ;DelftShell.Plugins.NetworkEditor v1.0.0.0 ; NetTopologySuite.Extensions v1.0.0.0 ; SharpMap v0.9.3385.26896 ;
GeoAPI v1.1.0.0
mscorlib v2.0.0.0 ;
DelftTools.DataObjects v1.0.0.0 ; GeoAPI.Extensions v1.0.0.0 ;DelftShell.Plugins.DelftModels.FlowModel v1.0.0.0 ; SharpMap.Extensions v0.9.3385.26911 ;SharpMap.UI v0.9.3385.26925 ; DelftShell.Plugins.DeveloperTools v1.0.0.0 ;DelftShell.Plugins.SharpMapGis v1.0.0.0 ; DelftShell.Plugins.NetworkEditor v1.0.0.0 ;NetTopologySuite.Extensions v1.0.0.0 ; SharpMap v0.9.3385.26896 ; NetTopologySuite v1.7.3.26867 ;
GeoAPI.Extensions v1.0.0.0
DelftTools.DataObjects.Functions v1.0.0.0 ; DelftTools.Utils v1.0.0.0 ; mscorlib v2.0.0.0 ;GeoAPI v1.1.0.0 ;
DelftTools.DataObjects v1.0.0.0 ; DelftShell.Plugins.DelftModels.FlowModel v1.0.0.0 ;DelftShell.Plugins.NetCDF v1.0.0.0 ; SharpMap.Extensions v0.9.3385.26911 ; SharpMap.UI v0.9.3385.26925 ; DelftShell.Plugins.DeveloperTools v1.0.0.0 ; DelftShell.Plugins.SharpMapGis v1.0.0.0 ; DelftShell.Plugins.NetworkEditor v1.0.0.0 ; NetTopologySuite.Extensions v1.0.0.0 ;SharpMap v0.9.3385.26896 ;
NetTopologySuite v1.7.3.26867
mscorlib v2.0.0.0 ; GeoAPI v1.1.0.0 ; System v2.0.0.0 ; System.Data v2.0.0.0 ; System.Xml v2.0.0.0 ;
DelftTools.DataObjects v1.0.0.0 ; DelftShell.Plugins.DelftModels.FlowModel v1.0.0.0 ;SharpMap.Extensions v0.9.3385.26911 ; SharpMap.UI v0.9.3385.26925 ;DelftShell.Plugins.DeveloperTools v1.0.0.0 ; DelftShell.Plugins.SharpMapGis v1.0.0.0 ;DelftShell.Plugins.NetworkEditor v1.0.0.0 ; NetTopologySuite.Extensions v1.0.0.0 ; SharpMap v0.9.3385.26896 ;
DelftTools.DataObjects v1.0.0.0
mscorlib v2.0.0.0 ; GeoAPI.Extensions v1.0.0.0 ; DelftTools.Utils v1.0.0.0 ; System.Xml v2.0.0.0 ; System v2.0.0.0 ; GeoAPI v1.1.0.0 ; DelftTools.DataObjects.Functions v1.0.0.0 ;System.Drawing v2.0.0.0 ; DelftTools.Units v1.0.0.0 ; NetTopologySuite v1.7.3.26867 ;System.Core v3.5.0.0 ; PostSharp.Public v1.0.0.0 ; PostSharp.Laos v1.0.0.0 ;
DelftShell.Gui v1.0.0.0 ; DelftShell.Plugins.CommonTools v1.0.0.0 ;DelftShell.Plugins.DelftModels.FlowModel v1.0.0.0 ; DelftShell.Plugins.DeveloperTools v1.0.0.0 ;DelftShell.Plugins.SharpMapGis v1.0.0.0 ; DelftShell.Plugins.NetworkEditor v1.0.0.0 ;
DelftShell.Core v1.1.0.0
mscorlib v2.0.0.0 ; DelftTools.Core v1.0.0.0 ; System v2.0.0.0 ; log4net v1.2.10.0 ;DelftTools.Units v1.0.0.0 ; DelftTools.Utils v1.0.0.0 ; System.Configuration v2.0.0.0 ;
DelftShell.Gui v1.0.0.0 ;
DelftShell.Gui v1.0.0.0
DelftTools.Gui v1.0.0.0 ; mscorlib v2.0.0.0 ; System.Windows.Forms v2.0.0.0 ;DevComponents.DotNetBar v7.7.0.0 ; System.Data v2.0.0.0 ; log4net v1.2.10.0 ;Netron.NetronLight v2.5.2884.25079 ; System v2.0.0.0 ; DelftTools.Core v1.0.0.0 ;System.Drawing v2.0.0.0 ; DelftTools.Utils v1.0.0.0 ; System.Xml v2.0.0.0 ;DelftTools.Gui.Swf.Controls v1.0.0.0 ; DelftTools.DataObjects v1.0.0.0 ;System.Configuration v2.0.0.0 ; DelftShell.Core v1.1.0.0 ; System.Core v3.5.0.0 ;PostSharp.Public v1.0.0.0 ; PostSharp.Laos v1.0.0.0 ;
DelftShell.Loader v1.0.0.0 ;
DelftShell.Loader v1.0.0.0
mscorlib v2.0.0.0 ; log4net v1.2.10.0 ; DelftShell.Gui v1.0.0.0 ; DelftTools.Gui v1.0.0.0 ;System.Windows.Forms v2.0.0.0 ; System v2.0.0.0 ;
-
DelftShell.Plugins.CommonTools v1.0.0.0
mscorlib v2.0.0.0 ; DelftTools.Gui v1.0.0.0 ; DelftTools.Core v1.0.0.0 ;System.Windows.Forms v2.0.0.0 ; System.Drawing v2.0.0.0 ; DelftTools.DataObjects v1.0.0.0 ; System v2.0.0.0 ; DelftTools.Utils v1.0.0.0 ;
-
DelftShell.Plugins.Data.NHibernate v1.0.0.0
mscorlib v2.0.0.0 ; NHibernate v2.1.0.1002 ; DelftTools.Core v1.0.0.0 ; DelftTools.Utils v1.0.0.0 ; System v2.0.0.0 ; log4net v1.2.10.0 ; System.Drawing v2.0.0.0 ; System.Data v2.0.0.0 ; PostSharp.Public v1.0.0.0 ;
-
DelftModelApi.Net v1.0.0.0
mscorlib v2.0.0.0 ; log4net v1.2.10.0 ; System.Xml v2.0.0.0 ;
DelftModelServer v1.0.0.0 ; DelftShell.Plugins.DelftModels.FlowModel v1.0.0.0 ;
DelftModelServer v1.0.0.0
mscorlib v2.0.0.0 ; DelftModelApi.Net v1.0.0.0 ; log4net v1.2.10.0 ; System v2.0.0.0 ;System.Runtime.Remoting v2.0.0.0 ;
DelftShell.Plugins.DelftModels.FlowModel v1.0.0.0 ;
NetTopologySuite.Extensions v1.0.0.0
DelftTools.DataObjects.Functions v1.0.0.0 ; GeoAPI.Extensions v1.0.0.0 ; DelftTools.Utils v1.0.0.0 ; mscorlib v2.0.0.0 ; NHibernate v2.1.0.1002 ; GeoAPI v1.1.0.0 ; NetTopologySuite v1.7.3.26867 ; System.Data v2.0.0.0 ; PostSharp.Public v1.0.0.0 ; PostSharp.Laos v1.0.0.0 ;System v2.0.0.0 ;
DelftShell.Plugins.DelftModels.FlowModel v1.0.0.0 ; DelftShell.Plugins.NetCDF v1.0.0.0 ;SharpMap.Extensions v0.9.3385.26911 ; DelftShell.Plugins.DeveloperTools v1.0.0.0 ;DelftShell.Plugins.SharpMapGis v1.0.0.0 ; SharpMap v0.9.3385.26896 ;
DelftShell.Plugins.DelftModels.FlowModel v1.0.0.0
mscorlib v2.0.0.0 ; DelftTools.DataObjects v1.0.0.0 ; DelftTools.Core v1.0.0.0 ;DelftTools.Gui v1.0.0.0 ; DelftTools.Utils v1.0.0.0 ; DelftTools.DataObjects.Functions v1.0.0.0 ; System.Windows.Forms v2.0.0.0 ; System.Drawing v2.0.0.0 ; log4net v1.2.10.0 ;DelftModelServer v1.0.0.0 ; DelftModelApi.Net v1.0.0.0 ; GeoAPI.Extensions v1.0.0.0 ;System v2.0.0.0 ; System.Core v3.5.0.0 ; NetTopologySuite v1.7.3.26867 ; GeoAPI v1.1.0.0 ;NetTopologySuite.Extensions v1.0.0.0 ; DelftTools.Units v1.0.0.0 ;DelftTools.Gui.Swf.Controls v1.0.0.0 ; PostSharp.Public v1.0.0.0 ; PostSharp.Laos v1.0.0.0 ;
DelftShell.Plugins.DeveloperTools v1.0.0.0 ;
DelftShell.Plugins.NetCDF v1.0.0.0
mscorlib v2.0.0.0 ; DelftTools.Core v1.0.0.0 ; DelftTools.DataObjects.Functions v1.0.0.0 ;DelftTools.Utils v1.0.0.0 ; log4net v1.2.10.0 ; netcdf-4.0 v0.0.0.0 ;IKVM.OpenJDK.ClassLibrary v0.36.0.11 ; System.Drawing v2.0.0.0 ;NetTopologySuite.Extensions v1.0.0.0 ; GeoAPI.Extensions v1.0.0.0 ; System.Core v3.5.0.0 ;System v2.0.0.0 ;
DelftShell.Plugins.SharpMapGis v1.0.0.0 ;
SharpMap v0.9.3385.26896
mscorlib v2.0.0.0 ; GeoAPI.Extensions v1.0.0.0 ; System.Data v2.0.0.0 ; DelftTools.Utils v1.0.0.0 ; System.Web v2.0.0.0 ; NetTopologySuite v1.7.3.26867 ; GeoAPI v1.1.0.0 ;System.Xml v2.0.0.0 ; System v2.0.0.0 ; log4net v1.2.10.0 ; System.Drawing v2.0.0.0 ;ProjNET v1.1.2854.24700 ; PostSharp.Public v1.0.0.0 ; NetTopologySuite.Extensions v1.0.0.0; DelftTools.DataObjects.Functions v1.0.0.0 ; DelftTools.Gui.Swf.Controls v1.0.0.0 ;System.Windows.Forms v2.0.0.0 ; PostSharp.Laos v1.0.0.0 ;
SharpMap.Extensions v0.9.3385.26911 ; SharpMap.UI v0.9.3385.26925 ;DelftShell.Plugins.DeveloperTools v1.0.0.0 ; DelftShell.Plugins.SharpMapGis v1.0.0.0 ;DelftShell.Plugins.NetworkEditor v1.0.0.0 ;
SharpMap.Extensions v0.9.3385.26911
mscorlib v2.0.0.0 ; SharpMap v0.9.3385.26896 ; DelftTools.Utils v1.0.0.0 ;DelftTools.DataObjects.Functions v1.0.0.0 ; System.Data v2.0.0.0 ; GeoAPI.Extensions v1.0.0.0 ; GeoAPI v1.1.0.0 ; System.Drawing v2.0.0.0 ; log4net v1.2.10.0 ; gdal_csharp v1.0.2965.23935 ; NetTopologySuite v1.7.3.26867 ; ogr_csharp v1.0.2965.23935 ; Nini v1.1.0.0 ; System v2.0.0.0 ; System.Core v3.5.0.0 ; NetTopologySuite.Extensions v1.0.0.0 ;PostSharp.Public v1.0.0.0 ;
DelftShell.Plugins.SharpMapGis v1.0.0.0 ;
SharpMap.UI v0.9.3385.26925
mscorlib v2.0.0.0 ; System.Windows.Forms v2.0.0.0 ; GeoAPI.Extensions v1.0.0.0 ; System v2.0.0.0 ; GeoAPI v1.1.0.0 ; SharpMap v0.9.3385.26896 ; System.Drawing v2.0.0.0 ; log4net v1.2.10.0 ; DelftTools.Utils v1.0.0.0 ; Irrlicht.NET v0.8.1.0 ;DelftTools.DataObjects.Functions v1.0.0.0 ; System.Web v2.0.0.0 ; PostSharp.Public v1.0.0.0 ; System.Data v2.0.0.0 ; NetTopologySuite v1.7.3.26867 ; PostSharp.Laos v1.0.0.0 ;
DelftShell.Plugins.SharpMapGis v1.0.0.0 ; DelftShell.Plugins.NetworkEditor v1.0.0.0 ;
DelftShell.Plugins.SharpMapGis v1.0.0.0
DelftTools.Gui v1.0.0.0 ; mscorlib v2.0.0.0 ; System.Windows.Forms v2.0.0.0 ;DelftTools.Core v1.0.0.0 ; SharpMap v0.9.3385.26896 ; System v2.0.0.0 ; NHibernate v2.1.0.1002 ; SharpMap.UI v0.9.3385.26925 ; log4net v1.2.10.0 ; GeoAPI v1.1.0.0 ;System.Drawing v2.0.0.0 ; DelftTools.Gui.Swf.Controls v1.0.0.0 ;DelftTools.DataObjects.Functions v1.0.0.0 ; NetTopologySuite.Extensions v1.0.0.0 ;GeoAPI.Extensions v1.0.0.0 ; DelftTools.Utils v1.0.0.0 ; SharpVectorBindings v0.3.1.27844 ;System.Data v2.0.0.0 ; SharpMap.Extensions v0.9.3385.26911 ; DelftShell.Plugins.NetCDF v1.0.0.0 ; NetTopologySuite v1.7.3.26867 ; System.Core v3.5.0.0 ; PostSharp.Public v1.0.0.0; SharpVectorCss v0.3.1.27844 ; System.Xml v2.0.0.0 ; DelftTools.DataObjects v1.0.0.0 ;
DelftShell.Plugins.DeveloperTools v1.0.0.0 ; DelftShell.Plugins.NetworkEditor v1.0.0.0 ;
DelftShell.Plugins.NetworkEditor v1.0.0.0
DelftTools.Gui v1.0.0.0 ; mscorlib v2.0.0.0 ; SharpMap v0.9.3385.26896 ;System.Windows.Forms v2.0.0.0 ; TeeChart v3.5.3225.32184 ; DelftTools.Gui.Swf.Controls v1.0.0.0 ; DelftTools.DataObjects v1.0.0.0 ; SharpMap.UI v0.9.3385.26925 ; DelftTools.Core v1.0.0.0 ; DelftShell.Plugins.SharpMapGis v1.0.0.0 ; GeoAPI.Extensions v1.0.0.0 ; GeoAPI v1.1.0.0 ; System.Drawing v2.0.0.0 ; System v2.0.0.0 ; NetTopologySuite v1.7.3.26867 ;log4net v1.2.10.0 ; DelftTools.Utils v1.0.0.0 ; System.Data v2.0.0.0 ; PostSharp.Public v1.0.0.0 ; DelftTools.DataObjects.Functions v1.0.0.0 ; DevExpress.XtraEditors.v8.2 v8.2.4.0; DelftTools.Units v1.0.0.0 ; DevExpress.XtraGrid.v8.2 v8.2.4.0 ;
DelftShell.Plugins.DeveloperTools v1.0.0.0 ;
DelftShell.Plugins.DeveloperTools v1.0.0.0
DelftTools.Gui v1.0.0.0 ; DelftTools.Core v1.0.0.0 ; mscorlib v2.0.0.0 ; System.Drawing v2.0.0.0 ; DelftTools.Utils v1.0.0.0 ; GeoAPI.Extensions v1.0.0.0 ;NetTopologySuite.Extensions v1.0.0.0 ; NetTopologySuite v1.7.3.26867 ; GeoAPI v1.1.0.0 ;DelftShell.Plugins.DelftModels.FlowModel v1.0.0.0 ; DelftTools.DataObjects v1.0.0.0 ;DelftTools.DataObjects.Functions v1.0.0.0 ; DelftShell.Plugins.NetworkEditor v1.0.0.0 ;DelftShell.Plugins.SharpMapGis v1.0.0.0 ; SharpMap v0.9.3385.26896 ;System.Windows.Forms v2.0.0.0 ; System v2.0.0.0 ;
-
DelftShell.Plugins.ImportExport v1.0.0.0
DelftTools.Gui v1.0.0.0 ; mscorlib v2.0.0.0 ; DelftTools.Core v1.0.0.0 ; System.Drawing v2.0.0.0 ; DelftTools.Utils v1.0.0.0 ;
-
DelftShell.Plugins.UdUnits v1.0.0.0
mscorlib v2.0.0.0 ; DelftTools.Units v1.0.0.0 ; System.Windows.Forms v2.0.0.0 ; System v2.0.0.0 ; netcdf-4.0 v0.0.0.0 ; IKVM.OpenJDK.ClassLibrary v0.36.0.11 ; System.Drawing v2.0.0.0 ;
-
DelftShell.Plugins.ProjectExplorer v1.0.0.0
DelftTools.Gui v1.0.0.0 ; DelftTools.Core v1.0.0.0 ; mscorlib v2.0.0.0 ;System.Windows.Forms v2.0.0.0 ; log4net v1.2.10.0 ; DelftTools.Utils v1.0.0.0 ;System.Drawing v2.0.0.0 ; System v2.0.0.0 ; DelftTools.Gui.Swf.Controls v1.0.0.0 ;System.Core v3.5.0.0 ; PostSharp.Public v1.0.0.0 ; PostSharp.Laos v1.0.0.0 ;
-
Unknown User (don)
Unknown User (don)
Here some big part is Designer-generated code, plus NTS should be excluded
Unknown User (muurman) AUTHOR
Build times on my pc:
Without PostSharp 2:45
With PostSharp 1.0 via MSBuild 8 minutes
With PostSharp 1.5 via MSBuild 7 minutes
With PostSharp 1.0 via PostbuildEvent 7 minutes (current situation)
With PostSharp 1.5 via PostbuildEvent not working
Times may vary as compile is repeated. Also memory usage increases.
Unknown User (muurman) AUTHOR
Concerning PostSharp interception of fields: You could skip auto-generated backing-fields. Other fields
should be intercepted since they can have a public property counterpart. eg:
Changing the private field name will result in a change in Name and should cause a propertychanged. Thus if we skip all private fields we should use public properties internally in the class as well
Unknown User (don)
Plugin
------
DelftShell.Plugins.NetworkEditor
call "$(SolutionDir)\bin\PluginPostBuild.cmd" "$(SolutionDir)" "$(TargetDir)" $(ProjectName)
call "$(SolutionDir)\bin\PluginPostBuild.cmd" $(ProjectName) $(ConfigurationName) SharpMap
call "$(SolutionDir)\bin\PluginPostBuild.cmd" $(ProjectName) $(ConfigurationName) SharpMap.UI
call "$(SolutionDir)\bin\PluginPostBuild.cmd" $(ProjectName) $(ConfigurationName) SharpMap.Extensions
call "$(SolutionDir)\bin\PluginPostBuild.cmd" $(ProjectName) $(ConfigurationName) NetTopologySuite
call "$(SolutionDir)\bin\PluginPostBuild.cmd" $(ProjectName) $(ConfigurationName) NetTopologySuite.Extensions
SharpMap.Extentions.Tests
--------------------------
call "$(SolutionDir)\bin\CopyNativeLibraries.cmd" $(ProjectName) $(ConfigurationName) SharpMap.Extensions
call "$(SolutionDir)\bin\CopyNativeLibraries.cmd" $(ProjectName) $(ConfigurationName) SharpMap.Extensions SharpMap
call "$(SolutionDir)\bin\CopyNativeLibraries.cmd" $(ProjectName) $(ConfigurationName) DelftShell.Plugins.FlowModel DelftShell.Plugins.FlowModel
====================================================================
call "$(SolutionDir)\bin\PluginPostBuild.cmd" "$(SolutionDir)apps\DelftShell\modules\DelftShell.Loader\bin\plugins\$(ProjectName)\" "$(TargetDir)"
Plugin111/
modules/
Plugin111/
bin/
Debug/
Release/
lib/
tests/
How to work with development
------------------
Reduce dependencies
------------------
Barry Faassen
See part II of the document (in the attachments) from Microsoft how they manage large solutions.
Unknown User (don)
More notes from worklog:
Q: How to copy plugin library automatically to target dir (Loader/bin/plugins for now) together with their native libraries
A: Incliude the following in your project file:
<Import Project="..\..\..\..\build\DelftShell.targets" />
<PropertyGroup>
<IsPluginComponent>true</IsPluginComponent>
<PluginName>NetworkEditor</PluginName>
</PropertyGroup>
Note: it works also for a different projects of the plugin. Native libraries are copied automatically from:
<component>/
modules/
Project1/
Project2/
lib/
Project1/ ------------- if such a dir is found - content will be copied to the plugins/<PluginName>
Project2/
Q: How to enable PostSharp:
<PropertyGroup>
<UsePostSharp>true</UsePostSharp>
</PropertyGroup>
===== PostSharp projects:
DelftShell\modules\DelftShell.Gui\DelftShell.Gui.csproj
DelftTools\modules\DelftTools.Core\DelftTools.Core.csproj
DelftTools\modules\DelftTools.DataObjects\DelftTools.DataObjects.csproj
DelftTools\modules\DelftTools.DataObjects.Function\DelftTools.DataObjects.Functions.csproj
DelftTools\modules\DelftTools.Gui.Swf.Controls\DelftTools.Gui.Swf.Controls.csproj
DelftTools\tests\DelftTools.Tests\DelftTools.Tests.csproj
DelftTools\modules\DelftTools.Utils\DelftTools.Utils.csproj
DelftShellPlugins\DataAccess\modules\DelftShell.Plugins.Data.NHibernate\DelftShell.Plugins.Data.NHibernate.csproj
DelftShellPlugins\DelftModels\modules\DelftShell.Plugins.DelftModels.FlowModel\DelftShell.Plugins.DelftModels.FlowModel.csproj
DelftShellPlugins\Habitat\modules\DelftShell.Plugins.Habitat\DelftShell.Plugins.Habitat.csproj
DelftShellPlugins\Habitat\modules\DelftShell.Plugins.Importers.Habitat\DelftShell.Plugins.Importers.Habitat.csproj
DelftShellPlugins\MWell\modules\DelftShell.Plugins.MWell\DelftShell.Plugins.MWell.csproj
DelftShellPlugins\SharpMapGis\modules\DelftShell.Plugins.NetworkEditor\DelftShell.Plugins.NetworkEditor.csproj
DelftShellPlugins\OpenMI\modules\DelftShell.Plugins.OpenMI\DelftShell.Plugins.OpenMI.csproj
DelftShellPlugins\ProjectExplorer\modules\DelftShell.Plugins.ProjectExplorer\DelftShell.Plugins.ProjectExplorer.csproj
DelftShellPlugins\Series\modules\DelftShell.Plugins.Series\DelftShell.Plugins.Series.csproj
DelftShellPlugins\SharpMapGis\modules\DelftShell.Plugins.SharpMapGis\DelftShell.Plugins.SharpMapGis.csproj
DelftShellPlugins\Toolbox\modules\DelftShell.Plugins.Toolbox\DelftShell.Plugins.Toolbox.csproj
DelftShellPlugins\Verkenner\modules\DelftShell.Plugins.Verkenner\DelftShell.Plugins.Verkenner.csproj
DelftShellPlugins\Habitat\modules\Habitat\Habitat.csproj
DelftShellPlugins\SharpMapGis\modules\NetTopologySuite.Extensions\NetTopologySuite.Extensions.csproj
DelftShellPlugins\SharpMapGis\modules\SharpMap\SharpMap.csproj
DelftShellPlugins\SharpMapGis\modules\SharpMap.Extensions\SharpMap.Extensions.csproj
DelftShellPlugins\SharpMapGis\modules\SharpMap.UI\SharpMap.UI.csproj
DelftShellPlugins\SharpMapGis\tests\SharpMapTestUtils\SharpMapTestUtils.csproj
DelftShellPlugins\TestPlugin1\modules\TestPlugin1\TestPlugin1.csproj
Q: Reduce number of PostSharp assemblies, move entities to a separate projects? There are far to many
A: ????
Q: Are plugin folders removed correctly from the plugins/ folder if user selects Clean on plugin project
A: yes, they are, see DelftShell.targets, currently the whole plugin folder is removed from plugins/
Q: When I add a new plugin, how loader will know that it should be build when I press F5
A: make Loader depend on plugin (no references!)
================================================================
TODO:
disable output in DelftShell.targets (too many echos)
refactor cp.exe in all dependent test projects or reduce number of these projects (e.g. copy native libs only to tests/Project1.Tests/bin/Debug/)
draw dependencies and build times
move Xtra components to Swf.Controls? and make it plugin?
merge DelftTools.Tests.AOP into DelftTools.Utils.Tests
MapTestUtils are placed in a separate project so that we won't reference SharpMap everywhere, DelftTools doesn't know anything about SharpMap
comments:
just remove it: ==> //form.ShowDialog();
WindowsFormsTestHelper.ShowModal(form);
WindowsFormsTestHelper.ShowModal(form); => WindowsFormsTestHelper.Show(form);, It is modal locally and non-modal on a build server
ShowModel implementation is a bit strange - refactor it
remove references to NHibernate from third-party projects, use <ProjectName>.NHibernate.dll instead