2008-11-05 24 views
5

MSBuild'imde sabit kodlama yolları olmadan MSBuild'i kullanarak çıkış derlemesini bir projeden MSBuild kullanarak hedef uygulamamın çıkış dizinine kopyalamak istediğim bir durumum var Görev kopyala. Web Uygulaması Projesi Başka bir projeden MSBuild kopya çıktısını geçerli projenin çıktısına dönüştürür

  • Proje B - - Dal Arayüz Projesi
  • Proje C - Dal Uygulama Projesi de İş tabakası vardır
  • , ancak hiçbir sahiptir

    • Proje A: İşte senaryo MSBuild sorun için alaka sorunu çözmek için arıyorum.

      İş katmanım Dal.Interface projem için bir başvuru kaynağı var. Web projem, İş katmanına bir referans veriyor ve haliyle, bir yapının yapılması, iş katmanını ve Dal.Interface projelerini çıktıya çekecek. Çok uzak çok iyi. Artık web uygulamasının çalışması için Dal uygulamasına ihtiyacı var. Uygulamaya kodlama zorlamak istediğimden ve bir referansa sahip olmamak istediğimden, intellisense, vb. Gösterilmeyeceği anlamına geldiğinden, herhangi bir yere başvurulmasını istemiyorum.

      Bu yüzden MSBuild kopyasında bunu çözebileceğimi düşündüm Bir AfterBuild görevi olarak çalışması (web projesi oluşturulduğunda oluşturulacak olan Dal Uygulaması kurulumuna sahibim, yalnızca başvurulan). MSBuild param'larında sabit kod yolları veya başka bir şey istemiyorum, bu yüzden Dal projesinin çıktısını Web Uygulaması Project'in MSBuild dosyasından nasıl referans alacağımı anlamaya çalışıyorum.

      1. Web uygulaması inşa Gerekli tüm projeler inşa etmek
      2. başlattı edilir (önceden yapılandırılmış, bu nedenle bu yapılır): Yani bu yukarıda bahsedilen projelerine dayalı

        gerçekleşmesini görmek istiyorum ne

      3. MSBuild "AfterBuild" görev başladı ve Proje C (Dal uygulaması) çıktısı sıkıştım nerede 3'tür Proje A (web uygulaması)

      Bölüm bin dizinine kopyalanır.

      Yapılabileceğine eminim, sadece yardım için iyi bir başvuru bulamıyorum. Herhangi bir yardım için şimdiden teşekkür ederiz.

    cevap

    8

    Bu işi yaptım, ancak MSBuild ($ (TargetDir) gibi) yerleşik parametrelerin avantajlarını kullanan ama çıktı almak istediğim projeye işaret eden daha temiz bir çözüm bulmayı çok isterim. için). Neyse, işte yaptığım budur:

    <Target Name="AfterBuild"> 
    <Copy SourceFiles="$(SolutionDir)MyProject.Dal.Linq\bin\$(Configuration)\MyProject.Dal.Linq.dll" DestinationFolder="$(TargetDir)"/> 
    </Target> 
    

    Temiz bir çözüm görmek isterdim, ama bu şimdilik yapmalıdır.

    +0

    Bu yaşları daha önce + 1'ledim. Bunu önerdiğiniz gibi temiz değil - Açıkçası OutDir değişirse, bu kırılır, örn. TeamBuild ile oluştururken. (Sadece başkalarının bunu görmesi ve eksiklikleri fark etmemesi durumunda). Ayrıca bkz. Http://stackoverflow.com/questions/2325598/determining-outputs-of-aject-ference-in-msbuild/2325620#2325620 –

    +0

    Bkz. Http: // stackoverflow.com/questions/2325598/belirleme-çıktılar-of-a-proje-içinde-ms-başvurusu/2325620 # 2325620 –

    0

    Yani, bir başvurunuz olsun, ancak VS'de görünmesini istemezsiniz. Bu nedenle, gerekiyorsa oluşturulmasını ve diğer Content dosyaları gibi çıktı olarak kopyalanmasını istiyorsunuz. Nasıl yapardınız:

    <Target Name="IncludeDALImplementation" BeforeTargets="AfterBuild"> 
        <MSBuild Projects="..\DalImplementation\DAL.csproj" BuildInParallel="$(BuildInParallel)" Targets="Build"> 
        <Output TaskParameter="TargetOutputs" ItemName="DalImplementationOutput" /> 
        </MSBuild> 
    
        <ItemGroup> 
        <Content Include="@(DalImplementationOutput)" /> 
        </ItemGroup> 
    </Target> 
    
    +0

    'den bahsettiğim kaygıyı ele almanın bir örneği için bu hatayı alıyorum: '' İçerik '' görevi Visual Studio – Thorarin

    +0

    @Thorarin: derlerken, bulunamadı. Fix Sabit kod, bunun için üzgünüm. Yine de, aynı değişikliği yapmamış olan – Jonathan

    +0

    'un test edilmediğini ve çalıştığını unutmayın. Projenin çıktılarının yanı sıra bağımlılıkları da kopyalamaya ihtiyacım vardı, bu yüzden yaklaşımımı biraz değiştirmek zorunda kaldım. – Thorarin

    İlgili konular