2015-05-13 11 views
10

"Build Solution" (Ctrl + F6) yaptığımda FAKE derleme komutumu çağrıştıran bir çözüm arıyorum. Varsayılandan başka bir hedef belirtmenin bir yolu için bonus puanları.Visual Studio'yu, çözümümüzü oluştururken FAKE kullanacak şekilde nasıl alabilirim?

+0

Ben doğrudan cevabım yok ama Paket 'paket.targets' dosyası (vardır https://github.com/fsprojects/ Paket/blob/68969d970bf2d60fb4e280e4365b6f87b9a7e285/.paket/paket.targets), bir çözüm (temelde, yürütülebilir dosyayı çalıştırarak) oluşturulduğunda Paket'i çalıştırır. Eminim FAKE için de aynısını yapabilirsin - ama MS Build XML'le ilgili bir şeyler yazacaksın ... –

+0

Post-build olayı? http://stackoverflow.com/a/1491413/126014 –

+1

Paket'in bunu nasıl gerçekleştirdiğine baktım: BuildDependsOn kullanıyorlar, ancak bu bir FAKE komut dosyası için işe yaramaz. Kendisine bir MSBuild görevini yürüten FAKE "Build" hedefi, FAKE komut dosyasını yinelemeli olarak tetikler. Bu çalışmayı güzelce yapabilmek için henüz uygun bir yol bulamadım. – GeorgS

cevap

6

Bugüne kadar bulunan çıkış penceresi kullanmak için ve bağımsız değişkenler için istemi

Tools -> External tools... 

ExternalTool

Set üzerinden harici bir araç gibi sahte tanımlamaktır yakın. Eğer varsayılan inşa etmek girmek bir hedef sağlamak ya da sadece basabilirsiniz onu çağırdığınızda Sonra

Tools -> Options -> Environment -> Keyboard -> Tools.ExternalCommand6 

üzerinden bir klavye kısayolu tanımlar.

6

Bu sorunu başka bir şekilde çözdüm. Bu, csproj dosyalarının manuel olarak düzenlenmesini gerektirir ve hile, Build, Clean ve Rebuild hedeflerinin koşullu olarak geçersiz kılınmasıdır.

Önce özel fake.targets dosyası oluşturdum ve çözüm seviyesinde Targets klasöre kaydedilir:

<PropertyGroup> 
    <FakeTargetsPath>..\Targets\fake.targets</FakeTargetsPath> 
</PropertyGroup> 
<Import Project="$(FakeTargetsPath)" Condition="Exists($(FakeTargetsPath)) And '$(RealBuild)'!='true'" /> 
: Eklediğim her *.csproj proje dosyasında <Project /> bölümünün alt kısmındaki,

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="Build"> 
    <Exec Command="packages\FAKE\tools\FAKE.exe build.fsx Build proj=$(ProjectPath) conf=$(Configuration) plat=$(Platform)" WorkingDirectory="..\" /> 
    </Target> 

    <Target Name="Rebuild"> 
    <Exec Command="packages\FAKE\tools\FAKE.exe build.fsx Rebuild proj=$(ProjectPath) conf=$(Configuration) plat=$(Platform)" WorkingDirectory="..\" /> 
    </Target> 

    <Target Name="Clean"> 
    <Exec Command="packages\FAKE\tools\FAKE.exe build.fsx Clean proj=$(ProjectPath) conf=$(Configuration) plat=$(Platform)" WorkingDirectory="..\" /> 
    </Target> 
</Project> 

Sonraki

Not:FakeTargetsPathcsproj dosyaya göre olur.

Son adım RealBuild = true ile MSBuild çağırır build.fsx yaratmaktı:

#r @"packages/FAKE/tools/FakeLib.dll" 
open Fake 

let solution = "solution.sln" 

let commonBuild target = 
    let project = getBuildParamOrDefault "proj" solution 
    let configuration = getBuildParamOrDefault "conf" "Release" 
    let platform = getBuildParamOrDefault "plat" "AnyCPU" 
    let setParams defaults = 
     { defaults with 
      Verbosity = Some(Quiet) 
      Targets = [ target ] 
      Properties = 
       [ 
        "Configuration", configuration 
        "Platform", platform 
        "RealBuild", "true" 
       ] 
     } 

    build setParams project 

Target "Build" (fun _ -> 
    commonBuild "Build" 
) 

Target "Clean" (fun _ -> 
    commonBuild "Clean" 
) 

Target "Rebuild" (fun _ -> 
    commonBuild "Rebuild" 
) 

RunTargetOrDefault "Build" 
+0

Çok ilginç. Bu 'RealBuild' seçeneğinin etkisi nedir? – VillasV