如何使用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>
来实现这一目标
答案 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正在使用项目文件中定义的项目导入。
你能具体告诉我们你在编译期间得到的错误吗?或者如果你在运行时遇到错误,它是什么?