<!--
  ~ 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.
  -->

<libs xmlns="http://npanday.apache.org/library-import/1.0.0">

  <nugetSources addNugetGallery="true">
    <custom>package-source</custom>
  </nugetSources>

  <nuget>
    <package>NUnit</package>
    <version source="2.6.0.12054" mapTo="2.6.0"/>
    <version source="2.5.10.11092" mapTo="2.5.10"/>
    <libDirs>
      <default>net40</default>
    </libDirs>

    <mapReference
      name="AssemblyName"
      ignore="true">
      <toPackage id="pname" version="1.0" />
    </mapReference>

  </nuget>
</libs>
