2010-03-16 26 views
7

'daki Çözüm düzeyindeki bir hedef çalıştırmayı bir kez gerçekleştirin Tüm çözüm için tam olarak bir kez yürütülmesi gereken bir görevler kümesine ihtiyacım var. Bu, her proje için her bir projeyi ayrı bir görevler kümesi olarak değiştirecek görevleri çalıştıracaktır. Bunu daha önce çözüm seviyesi görevlerine sahip olan çözüme ayrı bir proje kullanarak yapmıştık, ama bundan uzaklaşmak istiyoruz. Bunu yapan var mı, yoksa bunun nasıl uygulanacağı konusunda herhangi bir önerisi var mı?MSBuild

cevap

6

Çözüm dosyaları MSBuild biçiminde olmadığından kolayca genişletilemez veya özelleştirilemezler. Oluşturma işlemi üzerinde daha fazla denetim istiyorsanız, çözüm dosyanızın yerini alacak bir "sürücü" msbuild dosyası oluşturmanız gerekir. Bu sürücü dosyasında, ihtiyaç duyduğunuz tüm projeleri kurar ve bazı ek görevler gerçekleştirirsiniz. Bunu MSBuild task kullanarak yaparsınız. İşte, 1'den fazla projenin nasıl oluşturulacağını gösteren bir örnek.

<Project ...> 
    <ItemGroup> 
     <Projects Include="proj01.csproj"/> 
     <Projects Include="proj02.csproj"/> 
     <Projects Include="proj03.csproj"/> 
    </ItemGroup> 

    <Target Name="BuildAll"> 
     <MSBuild Projects="@(Projects)" BuildInParallel="true" /> 
    </Target> 

</Project> 

Bu durumda, projelerinizi oluşturmadan önce, yalnızca görevlerinizi yürütürsünüz. Ayrıca, BuildInParallel için MSBuild'in aynı anda birden çok projeyi deneyip çalıştırabileceğini belirten değeri belirtdiğimi de unutmayın.

+0

Bu ilginç bir fikir. Projeleri oluşturmadan önce bazı ek görevler yapmak istersem bunun da işe yarayacağına inanıyorum. (Ve bu ek görevler projeleri kendileri değiştirecek.) – Chandam

+0

Bu derleme dosyalarını oluşturmak çok yaygın bir senaryo. Birçok kişi, bu tür yapı dosyalarını yazmayı tercih ediyor; Benim durumumda, sadece Visual Studio için çözüm dosyaları kullanıyorum, asla gerçek yapılar için değil. –

+0

Bu yaklaşımda Sayed, benim projem 1'in proje 2'ye bağlı olup olmadığını, bu yüzden msbuild projemi 2'yi iki kez inşa etmeyecek ve bu sayede yapım sürecini geciktirmeyecek mi? – Nikhil