 ------
 List of Workarounds
 ------
 ------
 13 Mar 2009
 ------

NPanday List of Workarounds

	* NPanday generated output files have matching versions of that specified in the project's pom.xml version. 
	If the output file does not match that of the pom.xml you need to specify the version of the maven-compile-plugin 
	to the match that of the version of the NPanday that you are using.
	
	* Re-Importing a Project loses some references. Make sure that the added artifacts can be found in <<<gac>>>
    and/or local and/or remote repository, if not it won't be added in the pom though it is present in the References of VS.
	
    * Visual Basic Test goal errors can be due to incompatibilities between NPanday and the NUnit version used in the project.
    Changing the version of NUnit dependency in the project's <<<pom.xml>>> to <<< \<version\><<2.2.9.0>>\</version\> >>>
    will run the project successfully.
     
    * Visual Studio Addin is unable to build (compile) without installing the project.
    As a workaround, execute <<<All NPanday Projects \> Install>>> first before <<<All NPanday Projects \> Build [compile]>>>.

    * NPanday is not recognizing Visual Basic test codes.
    The project should be re-imported using <<<Generate Solution's POM Information...>>> option from the menu before executing
    the <<<All NPanday Projects \> Test>>> or <<<All NPanday Projects \> Install>>> goal.

    * NPanday is unable to build projects with dependencies in remote repository. As a workaround, reimport the project.

    * NPanday cannot release with references from <<<gac>>>. To make this work, 
    execute <<<npanday.plugin:NPanday.Plugin.Sysref.JavaBinding:prepare>>> before releasing the project.

    * Test goal output result is not refreshed for C# test project. To make this work, reimport the project and change the value
    of the test. Then, perform <<<Current\ Project:\ Test>>>.

	
    * Addin Error with Test Goal is encountered. Verification can be done in two ways as listed below. 
    
      [[I]] Use ProjectImporter. This creates two separate NPanday projects.

        [[1]] Import project with a main and a test module.

        [[2]] Perform <<<Maven Phase \> All Project : Install>>>.
        
        [[3]] Perform <<<Maven Phase \> All Project : Test>>>.
        
        []

      [[II]] Manually update the pom to specify the <<<\<testSourceDirectory\>>>>.
		
    		[[1]] Import project with a main and a test module.
    		
  		  [[2]] Update <<<\<testSourceDirectory\>>>> to point to the test project.
    		
  		  [[3]] Update <<<\<testIncludeSources\>>>> in the configuration element to add the test source codes individually.

        [[4]] Perform <<<Maven Phase \> All Project : Install>>>.
        
        [[5]] Perform <<<Maven Phase \> All Project : Test>>>.
  		  
  		  []
		
      []

	  []
