2010-06-21 5 views
2

일반적으로 C# 용 빌드 스크립트를 수행 할 때마다 빌드 할 각 프로젝트/dll에 대해 **/*. cs를 포함합니다. 그러나 이제는 프로젝트의 일부가 아니지만 해당 디렉토리에있는 .cs 파일이있는 상황이 있습니다 (다른 라이브러리의 참조 용으로). .csproj 파일에는 VS 빌드가 잘 작동하지만 nant 빌드는 연결되지 않으므로 연결되어 있지 않습니다..csproj 파일을 사용하여 C# 빌드하지 않음

관련 .csproj 파일에서 .cs 항목을 가져 와서 일반적인 와일드 카드 일치를 사용하는 대신 소스 파일 목록으로 사용하는 쉬운 방법이 있는지 알고있는 사람이 누구인지 알고 있습니까?

미리 감사드립니다.

답변

4

특별히 msbuild 을 C# 빌드 비트에 사용하지 않으려면 어떻게해야합니까? 이것이 저의 프로토콜 버퍼 포트에 대한 것이고, 잘 작동합니다. 이 필요하지만 nant-contrib이 필요합니다.하지만 그다지 어려운 점은 아닙니다.

그런 식으로하면 한 가지 일만하면되고, 같은 방식으로 만들어 질 것입니다.

영감을 얻기 위해 내 ProtoBuf 포트 빌드 파일 here을 살펴볼 수 있습니다. 분명한 단점은 모노 지원이지만 xBuild가 향상되고 있다고 생각합니다 ...

+0

그게 정확히 우리가하는 방법입니다. Lee와 같은'exec' 태스크를 통해 MSBuild를 호출하면 좋겠지 만 nantcotrib의'msbuild' 태스크를 사용하면 훨씬 더 편합니다. –

+0

고마워요, msbuild 확실히가는 길. 내 빌드 파일은 현재 크기의 1/4 정도입니다. –

+0

xbuild (.sln)로 ProtoBuf 포트를 빌드 해 보았습니다. 괜찮습니다. – radical

3

아니스는 <solution> 작업을 사용하여 csproj 파일을 포함하여 VS 솔루션을 자동으로 빌드하기 위해 support을 가지고 있습니다.

최신 지원 솔루션 형식

는 VS 2003입니다

+4

"지금은 Microsoft Visual Studio .NET 2002 및 2003 솔루션 및 프로젝트 만 지원됩니다." 요즘 굉장히 유용하지 않습니다. –

2

당신은 Exec에서 작업을 통해 MSBuild를를 사용하는 대신 직접 예를 들어, 컴파일러를 호출하는 프로젝트를 만들 수 msbuild project.csproj.

1

MSBuild를 사용하는 것이 좋습니다. 그러나 고아가 된 파일 (.csproj에없는 .cs 파일)이 있으면 aspnet_compile.exe가 실패하는 경우가 있습니다. 이 문제를 해결하기 위해 .csproj에 포함되지 않은 모든 * .cs 파일을 제거하기 위해 다음을 작성했습니다. 지금까지 그렇게 좋았습니다. 어떤 의견이라도 감사합니다.

<project> 
<foreach item="File" property="csprojFile"> 
<in> 
    <items> 
    <include name="source/**/*.csproj" /> 
    </items> 
</in> 
<do> 
    <property name="currentFolder" value="${directory::get-current-directory()}" /> 
    <property name="csprojParentFolder" value="${directory::get-parent-directory(csprojFile)}" /> 

    <foreach item="File" property="csFile"> 
    <in> 
    <items> 
    <include name="${csprojParentFolder}/**/*.cs"/> 
    </items> 
    </in> 
    <do> 

    <property name="csFileRelativePath" value="${string::replace(csFile, csprojParentFolder + '\', '')}" /> 
    <loadfile property="projFile" file="${csprojFile}" /> 
    <if test="${not string::contains(projFile, csFileRelativePath)}"> 
    <echo message="${csprojFile}: | Missing: ${csFileRelativePath}" /> 
    <!-- <delete file="${csprojParentFolder + '\' + csFileRelativePath}" /> --> 
    </if> 
    </do> 
    </foreach> 

</do> 
</foreach> 
</project> 
관련 문제