【问题标题】:How to build a class library with Nant如何使用 Nant 构建类库
【发布时间】:2010-11-02 18:30:34
【问题描述】:

如何使用 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 做到了这一点

【问题讨论】:

    标签: .net build-process build nant


    【解决方案1】:

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

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

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

    C:\Windows\assembly\GAC_MSIL\System.ComponentModel.DataAnnotations\3.5.0.0__31bf3856ad364e35

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

    【讨论】:

    • 真的吗? Nant 无法访问 GAC?
    • 这也许是件好事,它使你的代码更便携——你不能保证谁在他们的 GAC 中有什么。同事可能没有 System.ComponentModel.DataAnnotations,在这种情况下他/她就完蛋了。
    • 不要认为该论点适用于系统 dll。
    【解决方案2】:

    @丹

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

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

    【讨论】:

    • 感谢有用的信息。是的,我正在构建一个 3.5 的应用程序,所以我需要更新版本的 Nant
    【解决方案3】:

    我从来没有遇到过 NAnt 从 GAC 引用 DLL 的问题。您的线路应该可以工作,我实际上认为您的构建文件可能有其他问题,但我只是在猜测。

    这是我的一个构建文件中运行良好的行:

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

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

    你能具体告诉我们你在编译过程中遇到了什么错误吗?或者如果您在运行时遇到错误,那是什么?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      相关资源
      最近更新 更多