"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?
cevap
Bugüne kadar bulunan çıkış penceresi kullanmak için ve bağımsız değişkenler için istemi
Tools -> External tools...
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.
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:FakeTargetsPath
csproj
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"
Çok ilginç. Bu 'RealBuild' seçeneğinin etkisi nedir? – VillasV
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 ... –
Post-build olayı? http://stackoverflow.com/a/1491413/126014 –
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