2009-08-18 3 views
2

.NET 1.1에서 .NET 3.5로 내 응용 프로그램을 변환했지만 불행히도 NAnt의 태그는 .NET 3.5를 지원하지 않습니다. 그래서 msbuild를 직접 시작하기 위해 태그를 사용하려고합니다. 여기 <solution>에서 <exec program = msbuild> in NAnt

내가 .NET 1.1이 무엇을 :

나는

로 변환
<solution solutionfile="MyApp.sln" 
     configuration="ServerDebug" outputdir="MyApp\bin\ServerDebug"> 

      <assemblyfolders> 
        <include name="Dependencies\Libs\bin\ServerDebug"/> 
      </assemblyfolders> 
</solution> 

<exec program="msbuild"> 
    <arg value="MyApp.sln /p:Configuration=ServerDebug;OutDir=bin\ServerDebug\" /> 
</exec> 

나는를 복제하는 방법을 알아낼 수 없습니다 것을 제외하고 그래서 모든 것이 잘 작동 정말 convinient 태그, 어떤 컴파일러에게 힌트를 어디에 dependecies를 찾는 지에 대한 제공합니다.

기능을 복제하려면 무엇을 msbuild로 전달해야합니까?

답변

5

두 가지 옵션 중 하나를 사용하여 수행 할 수 있습니다. AdditionalLibPaths 또는 AssemblySearchPaths을 사용하거나 on MSDN으로 설명합니다. 다음과 같은

뭔가 : 그것은 가치가 무엇인지에 대한

<exec program="msbuild.exe"> 
    <arg line="/p:Configuration=ServerDebug"/> 
    <arg line="/p:OutDir=bin\ServerDebug\" /> 
    <arg line="/p:AssemblySearchPaths=Dependencies\Libs\bin\ServerDebug" /> 
    <arg line="MyApp.sln" /> 
</exec> 
3

, 나는 NAnt.exe.config에 다음을 추가하여 .NET 3.5 작업은 NAnt 0.86을 얻을 수있었습니다. 그렇게 한 후, project 태그 안에있는 내 빌드 파일의이 비트가 모두 필요했습니다. NAnt.exe.config에

<property name="nant.settings.currentframework" value="net-3.5" /> 

추가 :

<framework 
    name="net-3.5" 
    family="net" 
    version="2.0" 
    description="Microsoft .NET Framework 3.5" 
    sdkdirectory="${path::combine(sdkInstallRoot, 'bin')}" 
    frameworkdirectory="${path::combine(installRoot, 'v3.5')}" 
    frameworkassemblydirectory="${path::combine(installRoot, 'v2.0.50727')}" 
    clrversion="2.0.50727" 
    > 
    <runtime> 
     <probing-paths> 
      <directory name="lib/net/2.0" /> 
      <directory name="lib/net/neutral" /> 
      <directory name="lib/common/2.0" /> 
      <directory name="lib/common/neutral" /> 
     </probing-paths> 
     <modes> 
      <strict> 
       <environment> 
        <variable name="COMPLUS_VERSION" value="v2.0.50727" /> 
       </environment> 
      </strict> 
     </modes> 
    </runtime> 
    <reference-assemblies basedir="${path::combine(installRoot, 'v2.0.50727')}"> 
     <include name="Accessibility.dll" /> 
     <include name="mscorlib.dll" /> 
     <include name="Microsoft.Build.Utilities.dll" /> 
     <include name="Microsoft.Vsa.dll" /> 
     <include name="Microsoft.VisualBasic.dll" /> 
     <include name="Microsoft.VisualBasic.Compatibility.dll" /> 
     <include name="Microsoft.VisualBasic.Compatibility.Data.dll" /> 
     <include name="System.Configuration.dll" /> 
     <include name="System.Configuration.Install.dll" /> 
     <include name="System.Data.dll" /> 
     <include name="System.Data.OracleClient.dll" /> 
     <include name="System.Data.SqlXml.dll" /> 
     <include name="System.Deployment.dll" /> 
     <include name="System.Design.dll" /> 
     <include name="System.DirectoryServices.dll" /> 
     <include name="System.dll" /> 
     <include name="System.Drawing.Design.dll" /> 
     <include name="System.Drawing.dll" /> 
     <include name="System.EnterpriseServices.dll" /> 
     <include name="System.Management.dll" /> 
     <include name="System.Messaging.dll" /> 
     <include name="System.Runtime.Remoting.dll" /> 
     <include name="System.Runtime.Serialization.Formatters.Soap.dll" /> 
     <include name="System.Security.dll" /> 
     <include name="System.ServiceProcess.dll" /> 
     <include name="System.Transactions.dll" /> 
     <include name="System.Web.dll" /> 
     <include name="System.Web.Mobile.dll" /> 
     <include name="System.Web.RegularExpressions.dll" /> 
     <include name="System.Web.Services.dll" /> 
     <include name="System.Windows.Forms.dll" /> 
     <include name="System.Xml.dll" /> 
    </reference-assemblies> 
    <reference-assemblies basedir="${environment::get-folder-path('ProgramFiles')}/Reference Assemblies/Microsoft/Framework/v3.5"> 
     <include name="Microsoft.Build.Engine.dll" /> 
     <include name="Microsoft.Build.Framework.dll" /> 
     <include name="System.AddIn.Contract.dll" /> 
     <include name="System.AddIn.dll" /> 
     <include name="System.Core.dll" /> 
     <include name="System.Data.DataSetExtensions.dll" /> 
     <include name="System.Data.Linq.dll" /> 
     <include name="System.DirectoryServices.AccountManagement.dll" /> 
     <include name="System.Management.Instrumentation.dll" /> 
     <include name="System.Net.dll" /> 
     <include name="System.ServiceModel.Web.dll" /> 
     <include name="System.Web.Extensions.Design.dll" /> 
     <include name="System.Web.Extensions.dll" /> 
     <include name="System.Windows.Presentation.dll" /> 
     <include name="System.WorkflowServices.dll" /> 
     <include name="System.Xml.Linq.dll" /> 
    </reference-assemblies> 
    <reference-assemblies basedir="${environment::get-folder-path('ProgramFiles')}/Reference Assemblies/Microsoft/Framework/v3.0"> 
     <include name="System.IdentityModel.dll" /> 
     <include name="System.IdentityModel.Selectors.dll" /> 
     <include name="System.IO.Log.dll" /> 
     <include name="System.Printing.dll" /> 
     <include name="System.Runtime.Serialization.dll" /> 
     <include name="System.ServiceModel.dll" /> 
     <include name="System.Speech.dll" /> 
     <include name="System.Workflow.Activities.dll" /> 
     <include name="System.Workflow.ComponentModel.dll" /> 
     <include name="System.Workflow.Runtime.dll" /> 
     <include name="WindowsBase.dll" /> 
    </reference-assemblies> 
    <task-assemblies> 
     <!-- include MS.NET version-neutral assemblies --> 
     <include name="extensions/net/neutral/**/*.dll" /> 
     <!-- include MS.NET 2.0 specific assemblies --> 
     <include name="extensions/net/2.0/**/*.dll" /> 
     <!-- include MS.NET specific task assembly --> 
     <include name="NAnt.MSNetTasks.dll" /> 
     <!-- include MS.NET specific test assembly --> 
     <include name="NAnt.MSNet.Tests.dll" /> 
     <!-- include .NET 2.0 specific assemblies --> 
     <include name="extensions/common/2.0/**/*.dll" /> 
    </task-assemblies> 
    <tool-paths> 
     <directory name="${path::combine(sdkInstallRoot, 'bin')}" /> 
     <directory name="${path::combine(installRoot, 'v3.5')}" /> 
     <directory name="${path::combine(installRoot, 'v2.0.50727')}" /> 
    </tool-paths> 
    <project> 
     <readregistry 
      property="installRoot" 
      key="SOFTWARE\Microsoft\.NETFramework\InstallRoot" 
      hive="LocalMachine" /> 
     <readregistry 
      property="sdkInstallRoot" 
      key="SOFTWARE\Microsoft\Microsoft SDKs\Windows\v6.1\WinSDKNetFxTools\InstallationFolder" 
      hive="LocalMachine" 
      failonerror="false" /> 
     <property name="frameworkDirectoryV35" value="${path::combine(installRoot, 'v3.5')}" /> 
     <fail if="${not(directory::exists(frameworkDirectoryV35))}">The Framework directory for .NET 3.5 does not exist.</fail> 
     <property name="referenceV35" value="${environment::get-folder-path('ProgramFiles')}/Reference Assemblies/Microsoft/Framework/v3.5" /> 
     <fail if="${not(directory::exists(referenceV35))}">The Reference Assemblies directory for .NET 3.5 does not exist.</fail> 
    </project> 
    <tasks> 
     <task name="csc"> 
      <attribute name="exename">${path::combine(frameworkDirectoryV35,'csc.exe')}</attribute> 
      <attribute name="supportsnowarnlist">true</attribute> 
      <attribute name="supportswarnaserrorlist">true</attribute> 
      <attribute name="supportskeycontainer">true</attribute> 
      <attribute name="supportskeyfile">true</attribute> 
      <attribute name="supportsdelaysign">true</attribute> 
      <attribute name="supportsplatform">true</attribute> 
      <attribute name="supportslangversion">true</attribute> 
     </task> 
     <task name="vbc"> 
      <attribute name="exename">${path::combine(frameworkDirectoryV35,'vbc.exe')}</attribute> 
      <attribute name="supportsdocgeneration">true</attribute> 
      <attribute name="supportsnostdlib">true</attribute> 
      <attribute name="supportsnowarnlist">true</attribute> 
      <attribute name="supportskeycontainer">true</attribute> 
      <attribute name="supportskeyfile">true</attribute> 
      <attribute name="supportsdelaysign">true</attribute> 
      <attribute name="supportsplatform">true</attribute> 
      <attribute name="supportswarnaserrorlist">true</attribute> 
     </task> 
     <task name="jsc"> 
      <attribute name="supportsplatform">true</attribute> 
     </task> 
     <task name="vjc"> 
      <attribute name="supportsnowarnlist">true</attribute> 
      <attribute name="supportskeycontainer">true</attribute> 
      <attribute name="supportskeyfile">true</attribute> 
      <attribute name="supportsdelaysign">true</attribute> 
     </task> 
     <task name="resgen"> 
      <attribute name="supportsassemblyreferences">true</attribute> 
      <attribute name="supportsexternalfilereferences">true</attribute> 
     </task> 
     <task name="al"> 
      <attribute name="exename">${path::combine(sdkInstallRoot, 'bin/al.exe')}</attribute> 
     </task> 
     <task name="delay-sign"> 
      <attribute name="exename">sn</attribute> 
     </task> 
     <task name="license"> 
      <attribute name="exename">lc</attribute> 
      <attribute name="supportsassemblyreferences">true</attribute> 
     </task> 
    </tasks> 
</framework> 
1

내가 지금 잠시 동안 구성 NANT과 관리 및 CC.Net을하고있다. 내 경험으로는 Nant MSBuild 작업을 사용하지 않는 것이 좋습니다. 대신 가장 쉬운 방법은 작업을 만들고 실행하는 .bat 파일을 만드는 것입니다. 비주얼 스튜디오 커맨드 라인을 사용하는 것이 권장되는 몇 가지 이유가 있습니다. 하나의 MSI 패키지는 contrib을 사용한다고하더라도 Nant로 쉽게 빌드되지 않습니다. 그것의 다만 방법 더 쉽고 그리고 이렇게 빨리.

--------- 2.0 ------------- "C : \ Program Files \ Microsoft Visual Studio 8 \ Common7 \ IDE \ devenv"C : \ YourProject \ YourSoultion.sln/Rebuild release

---------- 3.5 -------------- "C : \ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ devenv "C : \ YourProject \ YourSoultion.sln/Rebuild release

+0

배치 파일에서 MSBuild를 호출하는 것이 좋지 않습니까? – AngryHacker

+0

Devenv, sln 파일을 작성하기 위해 MSBuild를 참조합니다. Devenv와 함께 MSbuild Vs를 호출하는 것 사이에는 약간의 차이가 있습니다. 우리의 개발 팀은 VS 2008에 있으며 Devenv 명령 행을 호출하는 것은 기본적으로 개발자 팀이 생산할 정확한 출력을 생산합니다. 그것이 MSbuild를 호출하는 것 이상으로 선택하는 이유입니다. 뭔가 잘못되면 사과를 사과와 비교하고 적어도 빌드 환경을 제거 할 수 있습니다. Devenv는 Msbuild를 호출하는 것과 비교해도 조금 느리지 만 일반적으로 많이는 아닙니다. –

+2

그러나 Devenv는 빌드 서버에 Visual Studio를 설치해야합니다. 라이센스면에서 (그리고 단순성을 위해) 많은 빌드 서버가 프레임 워크를 설치하기 만하면됩니다. 이는 프로젝트를 빌드하는 데 필요한 모든 것입니다. 어쨌든 여러 가지 이유로 피하고 설치해야하는 Visual Studio에 의존하지 않는 대안을 사용하는 설치 및 웹 배포 프로젝트는 피해야한다고 가정합니다. – tjmoore