MSBuild için oldukça yeni ve hem VS2010 hem de TFS2010'da oluşturduğum bir Wpf proje dosyasına biraz özelleştirme yapıyorum. Bu masaüstünde oluştururken bana merkezi ikili dizine oluşturmanızı sağlar
<OutputPath Condition=" '$(TeamBuildOutDir)' == '' ">$(SolutionDir)build\binaries\$(ProjectName)\$(Configuration)\$(Platform)</OutputPath>
<OutputPath Condition=" '$(TeamBuildOutDir)' != '' ">$(TeamBuildOutDir)binaries\$(ProjectName)\$(Configuration)\$(Platform)</OutputPath>
ve CI çalıştıran oluşturduğunda ikilileri bulmak için TFS sağlar: aşağıdaki gibi ben çıkış yolunu özelleştirilmiş ettik. Ancak, her iki durumda da $ (ProjectDir) özelliğinin '' yapım süresinde '' değerlendirdiği görülüyor ki bu da garip sonuçlar doğuruyor. Bazı hata ayıklama yapmak, BeforeBuild yürütme zamanı tarafından $ (ProjectName) ayarlanmış gibi görünür, ancak OutputPath özelliğim bu noktadan önce değerlendiriyormuş gibi görünür.
<ProjectNameUsedTooEarly Condition=" '$(ProjectName)' == '' ">true</ProjectNameUsedTooEarly>
Önceki özellik, OutputPath özelliği ile aynı özellik grubundadır. BeforeBuild hedefinde, $ (ProjectNameUsedTooEarly) doğru olarak değerlendirir, ancak $ (ProjectName) proje noktası için bu noktaya normal olarak değerlendirir.
Kullandığımda $ (ProjectName) değeri aldığından emin olmak için neler yapabilirim?
düzenleme: Sadece benim yapı dosyası üzerinden hata ayıklamak için Attrice en MSBuild Sidekick kullanılan ve kesme noktası için ilk hedefin mevcut (_CheckForInvalidConfigurationAndPlatform) tüm özellikler zaten ayarlanmış gibi görünüyor. ProjectName zaten doğru şekilde ayarlanmış, ancak OutputPath özelliği zaten ProjectName boş değeri kullanılarak ayarlanmış.
Evet, haklısın .. 2010 ile oynanan henüz gibi - ProjectDir ayarlanır (doğrudan MSBuildProjectDir gelen, aslında) Microsoft.Common.Targets içinde. Bunu araştırırken bulduğum çok şey var. Sanırım kendi karışıklığım, henüz common.targets, csharp.targets, söz konusu csproj dosyasının sırasını anlamadığımdan kaynaklanıyor sanırım. 2. ProjectName'i önceden oluşturulmuş makro sayfasından aldım. Projenin özellik sayfaları - MSBuildProjectName'in ekip oluşturma için mevcut olup olmadığını araştırmam gerek. MSBuildProjectName nereden geliyor? Nasıl sağlandığına dair bir fikrin var mı? – bwerks
3. Görünüşe göre malign ve etkisiz IsDesktopBuild $ (BuildingInsideVisualStudio) ile değiştirildi, ancak yalnızca bu özelliği yapı kütüğümde görmüş sayıyorum.TeamBuildOutDir'e gelince, haklısınız - normal bir VS yapısında ayarlanmadı, bu yüzden gerçekten varlığına bağlı olarak gerçekten tepki veriyorsunuz. Aslında bu fikri http://blogs.msdn.com/aaronhallberg/archive/2007/06/07/preserving-output-directory-structures-in-orcas-team-build.aspx adresinden aldım. – bwerks
+1: Tüm öğleden sonranı henüz başlamamış $ $ (ProjectName) üzerinden başımı eğerek geçirdim. Bu bana ilk önce Stack Overflow'u kontrol etmememi öğretecek ... –