63 | | * Use "MyPlugin" as Name and click "Browse..." to select the `extension` folder and click Ok |
64 | | * In the Solution Explorer right-click the MyPlugin solution and select "Add > New Project..." |
| 63 | * Use "GreatIdea" as Name and click "Browse..." to select the `extension` folder and click Ok |
| 64 | * In the Solution Explorer right-click the "GreatIdea" solution and select "Add > New Project..." |
| 65 | * On the right choose "Visual C#" and select the "Class Library" template |
| 66 | * As name pick "HeuristicLab.GreatIdea.ThePlugin" |
| 67 | |
| 68 | You're presented with a minimal project set up for developing a new class library (dll). Before we continue we want to adjust the project configuration to make development convenient. |
| 69 | |
| 70 | * Open the project properties and go to "Build" |
| 71 | * Change the first box from "Active (Debug)" to "All Configurations" |
| 72 | * Enter `..\..\..\stable\bin` in the output path |
| 73 | * Then click on "Debug" on the left, choose "Start external program" and select HeuristicLab.exe inside StableRoot\bin - this setting is stored in the .csproj.user file |
| 74 | * Then click on "Signing" on the left, activate "Sign the assembly" and create a new key |
| 75 | * Call it "TheKey", but deselect the password option |
| 76 | * Save the project and close the properties |
| 77 | |
| 78 | This ensures that the generated plugin is automatically added as a plugin to the HeuristicLab build and that we can use our solution to start a debugging session (shortcut <F5>). Now, we want to make this class library a HeuristicLab plugin. This requires that we include a special class that designates this dll to be a plugin. |
| 79 | |
| 80 | * For the project add a reference to `HeuristicLab.PluginInfrastructure.dll` in StableRoot\bin |
| 81 | * Open the properties of the reference and set "Copy Local" to false |
| 82 | * Rename `Class1.cs` to `Plugin.cs` by selecting it and pressing <F2> |
| 83 | * Replace the code in the file with the following code snippet |
| 84 | |
| 85 | {{{ |
| 86 | #!csharp |
| 87 | using HeuristicLab.PluginInfrastructure; |
| 88 | |
| 89 | namespace HeuristicLab.GreatIdea.ThePlugin { |
| 90 | [Plugin("HeuristicLab.GreatIdea.ThePlugin", "Provides an implementation of a great idea", "3.3.9.0")] |
| 91 | [PluginFile("HeuristicLab.GreatIdea.ThePlugin.dll", PluginFileType.Assembly)] |
| 92 | public class Plugin : PluginBase { |
| 93 | } |
| 94 | } |
| 95 | }}} |
| 96 | |
| 97 | '''Important''': The plugin class needs to derive from HeuristicLab.PluginInfrastructure.PluginBase so that the dll is realized as a plugin. The attributes specify the details of the plugin and which files it provides. The filename given in PluginFile has to be the same as the assembly output filename in the "Application" tab of the project's properties. |
| 98 | |
| 99 | '''Important''': Version numbers for plugins can be specified in the style major.minor.build.revision. Changing major or minor version numbers in the course of development marks a breaking change to files. If HeuristicLab's persistence comes across an item saved with a plugin version of 3.3.8 it will accept a new plugin of 3.3.9 to open it, but not when the new plugin version is 3.4.0 or 4.0. For this reason HeuristicLab plugin assemblies are always marked with major and minor number at the end, e.g. HeuristicLab.Core-3.3.dll. This allows to have the same assembly in two conflicting versions. |