= Quick guide: Create a new plugin with Visual Studio = We assume that you have obtained the source as described in [[Documentation/DevelopmentCenter/DownloadAndBuildSource|Quick guide: Download and build sources]]. We assume your directory structure looks as follows: [[Image(working_dir.png)]] == A new solution == We will now create a new Visual Studio solution and add a class library project which will become the HeuristicLab plugin. * Open a new instance of Visual Studio 2012 or later * Select "File > New > Project..." or press * In the dialog on the top select ".NET Framework 4" * On the right choose "Other Project Types > Visual Studio Solutions" and select the "Blank Solution" template or alternatively type "Blank Solution" in the search box on the right * Use "GreatIdea" as Name and click "Browse..." to select the `extension` folder and click Ok * In the Solution Explorer right-click the "GreatIdea" solution and select "Add > New Project..." * On the right choose "Visual C#" and select the "Class Library" template * As name pick "HeuristicLab.GreatIdea.ThePlugin" [[Image(create_solution.png)]] Note that we place the solution in the HL folder. It's a good idea to place your solution near the the !HeuristicLab source and use relative paths whenever possible (e.g. references, output path, ...). This makes it more easy to develop if you are more then 1 person working on the plugin and the project settings have to work on the computers of your colleagues. Your working directory should now look something like this: [[Image(working_dir_new.png)]] == Configuring the project == === !AssemblyInfo === Optionally you can change your {{{AssemblyInfo.cs}}} file. This is useful is you want to publish multiple version of your plugin later. We set the !AssemblyVersion to the same value as the current !HeuristicLab major version by convention. The assembly version should be incremented if you use the HL serialization mechanism and want to signal a persistence break between two versions. The !AssemblyFileVersion is not used by !HeuristicLab and can be set without any restrictions: [[Image(assembly_info.png)]] === References === Every HL plugin has at least a reference to !PluginInfrastructure as this is needed for the Plugin.cs file. Therefore add a reference to this plugin: [[Image(add_reference.png)]] === Plugin file === Visual Studio has already created a cs file when creating the project. Rename this file to Plugin.cs: [[Image(solution.png)]] Every !HeuristicLab plugin needs a Plugin file. This file contains information about the plugin itself (Name, Filename, Version) and it's dependencies. The dependencies are used by the plugin infrastructure to check if all required plugins for a certain plugin are found. Therefore write the following code in your Plugin.cs file: {{{#!csharp using HeuristicLab.PluginInfrastructure; namespace HeuristicLab.Algorithms.MyAlgorithm { [Plugin("HeuristicLab.Algorithms.MyAlgorithm", "1.0.0.0")] [PluginFile("HeuristicLab.Algorithms.MyAlgorithm.dll", PluginFileType.Assembly)] public class MyAlgorithmPlugin : PluginBase { } } }}} === Build path === The last step is to adjust the output path for the plugin. Because we don't want to copy the plugin file by hand to the HeuristicLab bin directory, we set the output path to this location so that it gets directly built there. Right click on your project, choose Properties and then the Build register card: [[Image(output_path.png)]] The output path is set as a relative path. This makes it possible for other people who may have a different directory layout (e.g. no C:\HL\) to also build the project. == Testing the plugin == You should now be able to compile your project and find your plugin file in the HeuristicLab bin folder. To test if everything works and the plugin infrastructure recognizes the plugin, start !HeuristicLab an double click the Plugin Manager application in the Starter dialog. Your plugin should be listed under "Active Plugins": [[Image(plugin_manager.png)]] == Where to go from here == Take a look at [[wiki:UsersHowtosImplementAnAlgorithm| this page]] which describes how to create a basic HL algorithm.