<?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> 
  <parent> 
    <groupId>npanday.plugin</groupId>  
    <version>1.0.0-RC1</version>  
    <artifactId>maven-dotnet-plugins</artifactId> 
  </parent>  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>npanday.plugin</groupId>  
  <artifactId>maven-vstudio-plugin</artifactId>  
  <packaging>maven-plugin</packaging>  
  <name>maven-vstudio-plugin</name>  
  <url>http://maven.apache.org/</url>  
  <dependencies> 
    <dependency> 
      <groupId>org.apache.maven</groupId>  
      <artifactId>maven-project</artifactId>  
      <version>2.0</version> 
    </dependency>  
    <dependency> 
      <groupId>org.apache.maven</groupId>  
      <artifactId>maven-plugin-api</artifactId>  
      <version>2.0</version> 
    </dependency>  
    <dependency> 
      <groupId>commons-io</groupId>  
      <artifactId>commons-io</artifactId>  
      <version>1.1</version> 
    </dependency>  
    <dependency> 
      <groupId>org.codehaus.plexus</groupId>  
      <artifactId>plexus-utils</artifactId>  
      <version>1.0.4</version> 
    </dependency>  
    <dependency> 
      <groupId>org.apache.maven</groupId>  
      <artifactId>maven-artifact</artifactId>  
      <version>2.0</version> 
    </dependency>  
    <dependency> 
      <groupId>org.codehaus.plexus</groupId>  
      <artifactId>plexus-container-default</artifactId>  
      <version>1.0-alpha-8</version>  
      <scope>test</scope> 
    </dependency> 
  </dependencies> 
</project>
