2013-05-09 27 views
8

Bir FAKE betiğinin parçası olarak oluşturmak yerine bir web sitesi yayınlamak mümkün mü?FAKE (F # Make) 'da yayın web sitesi (F # Make)

+0

Bunu yapmak için yerleşik bir görev olduğunu düşünmüyorum, ama kesinlikle bunu yapabilirsiniz (tıpkı F # programında yapabileceğiniz diğer her şey gibi). Siteyi nasıl yayınlamak istersiniz? FTP'yi veya başka bir şeyi mi kullanıyorsunuz? –

+0

Merhaba Tomas, özür dilerim, özellikle Visual Studio anlamında, bir jenerik yayınlamak yerine bir yerde yayınlamak demek istiyorum. Bu da demek istediğin şey mi? Öyleyse, o zaman sadece diske yayınlamak gerekir, ancak web.config dönüştürür çalışır, gereksiz dosyaları kaldırır vb – mattcole

+0

Evet, bu mantıklı. İnternete baktım ve bir cevaba bazı fikirler yolladım. –

cevap

7

Bu kendimle ilgili deneyimim yok, ancak web deploymnent işlemini elle çalıştırmanın iki yolu var gibi görünüyor. Bir (daha eski görünüyor) MSBuild'i özel bir hedefle (described here olarak) çağırmak ve başka bir seçenek (daha modern görünüyor) MSDeploy aracını kullanmaktır (has a command line interface).

Bunların her ikisi de FAKE komut dosyasından çağırılması kolay olmalıdır.

Target "Deploy" (fun _ -> 
    let result = 
     ExecProcess (fun info -> 
      info.FileName <- "file-to-run.exe" 
      info.Arguments <- "--parameters:go-here" 
     ) (System.TimeSpan.FromMinutes 1.0)  
    if result <> 0 then failwith "Operation failed or timed out" 
) 

bu gibi görünmelidir bir MSBuild komut dosyası çağırma: Dediğim gibi

Target "BuildTest" (fun _ -> 
    "Blah.csproj" 
    |> MSBuildRelease "" "ResolveReferences;_CopyWebApplication" 
    |> ignore 
) 

, ben bu test değil yani olabilir (Burada bir komut satırı aracı çağıran bir örnektir Tamamen yanlıştır, ama umarım, bazı web dağıtımı veya FAKE uzmanları SO'ya gelmeden önce, sizi yararlı bir yöne yönlendirebilir!

5

İşte bunu yapmanın bir yolu. (Yayıncılık binanın olmadan gerçekleştirilmez çünkü Aslında tam olarak, soruya cevap vermez.)

  • web sitesi yayınlamak gereken hedefler karar verin.
  • Onları "Oluşturma" hedefine bağlı hale getirin.
  • Yayınlama gerektiğinde, bir yayınlama profili kullanarak siteyi "Oluştur" hedefini yayınlayın. hedeflerin "Test", "AcceptanceTest", "dağıtma" biri çalıştırılır etapta bu kod ile

    let testProjects = @"src/**/*Tests.csproj" 
    
    let requestedTarget = getBuildParamOrDefault "target" "" 
    let shouldDeploy = 
        match requestedTarget with 
        | "Test" | "AcceptanceTest" | "Deploy" -> true 
        | _ -> false 
    
    
    // *** Define Targets *** 
    Target "BuildApp" (fun _ -> 
        let properties = 
         if shouldDeploy 
         then [ ("DeployOnBuild", "true"); ("PublishProfile","LocalTestServer.pubxml") ] 
         else [] 
        !! @"src/**/*.csproj" 
         -- testProjects 
         |> MSBuildReleaseExt null properties "Build" 
         |> Log "Build-Output: " 
    ) 
    
    // Other targets and dependencies omitted. 
    

    : Burada

bu yaklaşımı gösteren build.fsx kod parçasıdır web sitesi, LocalTestServer.pubxml'da tanımlanan yayınlama profiline göre yayınlanmaktadır.