如何使用Nant构建类库

时间:2009-06-13 23:50:42

标签: .net build-process build nant

如何使用Nant(0.86)将.net 3.5类库编译成dll?

这是我到目前为止所做的:

如何在GAC中引用系统dll?这条线似乎有效。

<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 个答案:

答案 0 :(得分:4)

您不能使用NAnt(我知道)在GAC中引用DLL,您需要在某处(例如在您的项目lib文件夹中)使用物理DLL并像普通DLL一样引用它:

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

获取GAC DLL副本的一种方法是从命令提示符cd到C:\ Windows \ assembly \ GAC_MSIL,并使用dir列出内容。这是一个隐藏的GAC目录。如果找到所需的程序集,请单击该文件夹,您将找到不同.NET版本的文件夹(例如3.5.0.0)。 cd到正确的一个,你应该找到你可以复制出来的DLL本身。在我的电脑上,我发现它:

C:\的Windows \组件\ GAC_MSIL \ System.ComponentModel.DataAnnotations \ 3.5.0.0__31bf3856ad364e35

我认为如果您使用MSBuild而不是csc,您不需要对GACed DLL的硬引用,它会为您找到它们。

答案 1 :(得分:2)

@丹

如果您愿意,请列出您要定位的.Net版本?我是一个新的nAnt用户,我很快就学到的一个项目是构建针对3.5SP1框架的Dll和可执行文件需要使用0.86 beta位而不是你所使用的0.85版本。

您可以使用0.85,但是您需要调用MSBuild任务并链接到解决方案/项目文件。这让我花了大约一天的时间在网上搜索。

答案 2 :(得分:0)

我从来没有遇到任何NAnt从GAC引用DLL的问题。你的行应该有用,我实际上认为你的构建文件可能还有其他问题,但我只是在猜测。

这是我的一个构建文件中的行,它们运行得很好:

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

我通常犯的一个常见错误是我和假设NAnt正在使用项目文件中定义的项目导入。

你能具体告诉我们你在编译期间得到的错误吗?或者如果你在运行时遇到错误,它是什么?