2009-06-13 4 views
4

Nant (0.86)가있는 dll에 .net 3.5 클래스 라이브러리를 컴파일하는 방법은 무엇입니까?Nant를 사용하여 클래스 라이브러리를 작성하는 방법

가 어떻게 GAC에 시스템 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

답변

4

당신은 NAnt를 (내가 아는), 당신이 어딘가에 실제 DLL을 (예를 들어 프로젝트 lib 폴더에) 및 일반 DLL처럼 참조해야 사용하여 GAC에 DLL을 참조 할 수 없습니다 :

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

GAC DLL의 복사본을 가져 오는 한 가지 방법은 명령 프롬프트에서 C : \ Windows \ assembly \ GAC_MSIL로 cd하고 dir을 사용하여 내용을 나열하는 것입니다. 이것은 숨겨진 GAC 디렉토리입니다. 필요한 어셈블리를 찾으면 그 폴더로 이동하고 다른 .NET 버전 (예 : 3.5.0.0)의 폴더를 찾습니다. 오른쪽으로 cd하고 복사 할 수있는 DLL 자체를 찾아야합니다.

C : \ WINDOWS \ 어셈블리 \ GAC_MSIL \ System.ComponentModel.DataAnnotations

3.5.0.0__31bf3856ad364e35 \ 내가 대신 CSC의 MSBuild를 사용하는 경우는 하드 필요가 없습니다 생각 내 컴퓨터에서 나는 그것을 발견 GACed DLL에 대한 참조를 찾아서 찾을 수 있습니다.

+0

정말요? Nant는 GAC에 액세스 할 수 없습니까? – Dan

+0

이것은 아마도 좋은 일 이겠지만 코드가 더 이식성있게 만들어줍니다. GAC에서 누가 무엇을 가지고 있는지 보장 할 수는 없습니다. 동료가 System.ComponentModel.DataAnnotations을 가지고 있지 않을 수도 있습니다. –

+1

인수가 시스템 dll에 적용된다고 생각하지 마십시오. – Dan

2

@Dan

를 사용하여이 작업을 지금까지 가지고 :

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

이 내 스크립트입니다? 나는 새로운 nAnt 사용자이고 매우 빨리 배운 한 항목은 3.5SP1 프레임 워크를 목표로하는 Dll 및 실행 파일을 빌드하는 것이 0.85 버전 대신 0.86 베타 비트를 사용하여 완료해야한다는 것입니다.

0.85를 사용할 수 있지만 MSBuild 작업을 호출하고 솔루션/프로젝트 파일에 연결해야합니다. 온라인에서 하루를 검색하는 날이있었습니다.

+0

고맙습니다. 유용한 정보. 네, 3.5 앱을 만들었으니 Nant의 최신 버전이 필요합니다. – Dan

0

GAC에서 DLL을 참조하는 NAnt와 관련하여 어떤 문제도 발생하지 않았습니다. 당신의 라인이 작동해야합니다. 실제로 빌드 파일에 뭔가 다른 문제가 있다고 생각 하겠지만, 저는 그냥 짐작하고 있습니다.

나는 일반적으로 만드는 일반적인 실수 일의
<references> 
    <include name="System.dll" /> 
    <include name="System.Data.dll" /> 
    <include name="System.XML.dll" /> 
</references> 

하나는 내 함께하고은 NAnt 프로젝트 파일에 정의 된 프로젝트 가져 오기를 사용하는 가정하면

여기에 그 잘 작동 내 빌드 파일 중 하나에서 줄입니다 .

컴파일 과정에서 어떤 오류가 발생했는지 구체적으로 말씀해 주시겠습니까? 또는 런타임에 오류가 발생하는 경우 무엇입니까?

관련 문제