<?xml version="1.0" encoding="UTF-8"?>

<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
   
  <parent> 
    <groupId>NPanday.Project</groupId>  
    <version>1.0.1-RC2</version>  
    <artifactId>NPanday.Project</artifactId>  
    <relativePath>../pom-dotnet.xml</relativePath> 
  </parent>  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>NPanday</groupId>  
  <artifactId>NPanday.Assemblies</artifactId>  
  <version>1.0.1-RC2</version>  
  <packaging>pom</packaging>  
  <name>NPanday.Assemblies</name>  
  <url>http://codeplex.com/npanday</url>  
  <description>NPanday provides Maven 2.x plugins to support building of .NET applications</description>  
  <modules>
    <module>NPanday.Model/Pom</module>  
    <module>NPanday.Model/Settings</module>  
    <module>NPanday.Model/AutomationExtensibility</module>
    <module>NPanday.Logging</module> 
	<module>NPanday.Artifact</module> 
    <module>NPanday.Plugin</module>
    <module>NPanday.Plugin.MojoGenerator</module>	
    <module>NPanday.Plugin.Loader</module>  
    <module>NPanday.Plugin.Runner</module>  
    <module>NPanday.Utils</module>
    <module>NPanday.ProjectImporter</module> 
  </modules>  
  <profiles> 
    <profile> 
      <id>VisualStudio2005</id>
      <activation> 
        <property> 
          <name>VisualStudio2005</name>
        </property>
      </activation>  
      <modules> 
        <module>NPanday.VisualStudio</module>  
        <module>NPanday.VisualStudio.Addin</module>  
        <module>NPanday.VisualStudio.ProjectWizard</module> 
      </modules>  
      <build> 
        <plugins> 
          <plugin> 
            <groupId>npanday.plugin</groupId>  
            <artifactId>maven-compile-plugin</artifactId>  
            <extensions>true</extensions>  
            <configuration> 
              <vendor>MICROSOFT</vendor>  
              <frameworkVersion>2.0.50727</frameworkVersion> 
            </configuration> 
          </plugin> 
        </plugins> 
      </build> 
    </profile> 
  </profiles> 
</project>
