Как построить библиотеку классов с помощью Nant - PullRequest
4 голосов
/ 14 июня 2009

Как мне скомпилировать библиотеку классов .net 3.5 в dll с Nant (0.86)?

Это то, что я имею до сих пор:

Как мне ссылаться на системную DLL в GAC? Эта строка, кажется, работает.

<include name="System.ComponentModel.DataAnnotations.dll"/>

Это мой сценарий:

<?xml version="1.0"?>
<project name="MyCorp.Data" default="all">

  <property name="debug" value="true" />

  <target name="all"/>

  <target name="clean" description="remove all build products">
    <delete dir="build"  if="${directory::exists('build')}" />
  </target>

  <target name="init">
    <mkdir dir="build" />
  </target>

    <target name="compile" 
            depends="init"
            description="compiles the application">
        <csc target="library" output="build\${project::get-name()}.dll" debug="${debug}">
            <sources>
                <include name="src\MyCorp.Data\**\*.cs" />                             
            </sources>
            <references>                        
          <include name="tools\subsonic\subsonic.dll"/>
          <include name="lib\log4net\log4net.dll"/>
          <include name="System.ComponentModel.DataAnnotations.dll"/>
            </references>                        
        </csc>
    </target>

</project>

Я получил это далеко используя JP Boodhoos post

Ответы [ 3 ]

4 голосов
/ 15 июня 2009

Вы не можете ссылаться на библиотеки DLL в GAC с помощью NAnt (о чем я знаю), вам нужно где-то иметь физическую библиотеку DLL (например, в папке lib вашего проекта) и ссылаться на нее как на обычную библиотеку DLL:

<include name="lib\System\System.ComponentModel.DataAnnotations.dll"/>

Один из способов получить копию библиотеки GAC - это перейти в C: \ Windows \ assembly \ GAC_MSIL из командной строки и перечислить содержимое с помощью dir. Это скрытый каталог GAC. Если вы найдете нужную сборку, перейдите в нее, и вы найдете папки для разных версий .NET (например, 3.5.0.0). Перейдите к правильному файлу, и вы должны найти саму DLL, которую вы можете скопировать. На моем компьютере я нашел его по адресу:

C: \ Windows \ сборка \ GAC_MSIL \ System.ComponentModel.DataAnnotations \ 3.5.0.0__31bf3856ad364e35

Я думаю, что если вы используете MSBuild вместо csc, вам не нужны жесткие ссылки на библиотеки GACed, он найдет их для вас.

2 голосов
/ 14 июня 2009

@ Dan

Пожалуйста, перечислите, на какую версию .Net вы ориентируетесь? Я новый пользователь nAnt, и один элемент, который я довольно быстро освоил, заключается в том, что создание Dll и исполняемых файлов, предназначенных для инфраструктуры 3.5SP1, должно выполняться с использованием бета-версии 0,86 вместо версии 0,85, на которой вы находитесь.

Вы можете использовать 0,85, но тогда вам нужно обратиться к задачам MSBuild и связать файлы решения / проекта. Это заняло у меня около дня поиска в Интернете, чтобы выяснить.

0 голосов
/ 16 декабря 2009

У меня никогда не было проблем с NAnt, ссылающимся на библиотеки DLL из GAC. Ваша строка должна работать, я бы подумал, что, вероятно, что-то не так с вашим файлом сборки, но я просто догадываюсь.

Вот строки из одного из моих файлов сборки, которые отлично работают:

<references>
    <include name="System.dll" />
    <include name="System.Data.dll" />
    <include name="System.XML.dll" />
</references>

Одна из распространенных ошибок, которые я обычно совершаю, связана с моей ошибкой, и предполагается, что NAnt использует импорт проекта, определенный в файле проекта.

Можете ли вы сказать нам конкретно, какую ошибку вы получаете во время компиляции? или если вы получаете сообщение об ошибке во время выполнения, что это такое?

...