Quick Notes

For some of the commands the tools that are required need to be installed on your dev/build box first. The mono build chain has not been finished yet.

The reason we're using msbuild scripts over using something like powershell or ablacore is that we can leverage msbuild & xbuild without having to write everything twice.  

build.cmd arguments

here some sample usage of the build.cmd file

$ build [targets=simple] [buildarea=all] [configuration=release]
$ build
$ build commit all release
$ build simple core
$ build commit all debug


Build Area

the configuration property is called Area. /p:Area=all


Common Build Targets On Windows

Build Properties of Note

Build Flow

The build.cmd sets values and invokes build.targets. build.targets acts almost like a controller, it takes the arguments and imports files & variables based on the incoming property values.

Depending on the specified Area, which defaults to 'all', the correct project.targets & documentation.targets are loaded into the build.targets. These files are under the subfolders in /build/scripts. i.e. build/scripts/Analyzers.

If the build property NETFRAMEWORK is defaulted, the dot-net-tools.targets are loaded. If mono is specified, the mono-tools.targets will be loaded.

The target will only be invoked on the assemblies that are listed by the project.targets & documentation.targets files. So if you run the command build document analyzers, the build scripts will only create documentation for the Lucene.Net.Contrib.Analyzers.dll assembly and put it into the artifacts folder for that area, i.e. /build/artifacts/Analyzers/docs.

Adding a new project

If you are adding a new project, then most likely a contrib project. If your new project is Contrib.AwesomeFacetedSearch, your simple name will be "AwesomeFacetedSearch".

Make sure that the assembly is signed using the Lucene.Net.snk in ~/lib/Lucene.Net.snk.  If the Project is on a version that is less than Lucene.Net 3.0, then suppress warning 618.  

The output path needs to be set to the right bin folder.   In release mode, it should be "..\..\..\build\bin\contrib\AwesomeFacetedSearch\Release\" with xml comments enabled.  In debug mode, it should be   "..\..\..\build\bin\contrib\AwesomeFacetedSearch\Debug\"

Create a new subfolder in "build/scripts" with the simple name of your project. For example, 

Copy the document.targets & project.targets from the build/scripts/Queries folder. Then do a search and replace on "Queries" with a case match. In the project.targets file, replace the lowercased "queries" with "awesomefacetedsearch".

Then add the following line to build.targets

<Import Project="AwesomeFacetedSearch/project.targets" Condition="'$(Area)' == 'awesomefacetedsearch'" />

And add this line to /build/scripts/All/project.targets & build/scripts/Contrib/project.targets

<Import Project="../AwesomeFacetedSearch/project.targets"  />

Add this line to the docs.shfbproj file

  <Import Project="AwesomeFacetedSearch/document.targets" Condition="'$(area)' == 'awesomefacetedsearch'" />

You should now be able to run build commands against 'awesomefacetedsearch' or have it build with contrib or all.  

try running.   build document awesomefacetedsearch

Common Build Targets On Mono