2013-10-16 10 views
6

Belirtilmemişse, msbuild bir platformu nasıl seçer? Bana öyle geliyor ki bazı çözümler için "x86" diğerleri için "Karışık Platformlar" seçiyor.Varsayılan msbuild platformu nedir

Günlüğe kaydetme tanılama düzeyini açarım ve görebildiğim tek şey, başlangıçta "Başlangıç ​​Özellikleri" nin örn. Herhangi bir açıklama yapmadan "Platform = Karışık Platformlar".

Bazı yanıtları ön görmek için, platformu el ile geçersiz kılabileceğimi biliyorum. Bu bir sorun değil. Belirtilmediğinde msbuild'in ne yapacağını bilmem gerek.

cevap

4

Bu yardımcı olabilir: Ben bu araştırma ve nihayet için varsayılan platformu aşağı takip edildi benim Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120 yaşıyor (Visual Studio bu sürümünde hat 21) Microsoft.Cpp.Default.props bakarak, yükleyin:

<Platform Condition="'$(Platform)' == ''">Win32</Platform> 

Bu başka bir platform açıkça belirtilmemişse VS12 (Visual Studio 2013) altında MSBuild platformu olarak Win32 almak anlamına gelir. Diğer bazı sorularda belirtildiği gibi, Platform isimli bir ortam değişkeninin ayarlanması varsayılanı ayarladığınız değere değiştirecektir.

Önemli not: Bir Visual Studio çözüm dosyası (* .Sln) yerine bir proje dosyası üzerinde MSBuild çağırmak ve MSBuild argümanları bir platform belirtmezseniz, o zaman MSBuild tercih edeceği anlaşılmaktadır Platform otomatik olarak çözüm dosyasındaki SolutionConfigurationPlatforms global bölümünün altındaki ilk girdiye dayanır. Bunu hiçbir yerde belgelemedim, ancak denemeden böyle görünüyor.Bu, proje dosyanızı düzenleme ve farklı bir varsayılan Platform özelliği sağlama (yukarıda açıklandığı gibi) anlamına gelir, MSBuild bu varsayılanı göz ardı eder, çünkü projeye bakmaya başlamadan önce platformu seçmiş olur. MSBuild'i doğrudan proje dosyasına çağırmak bu davranışı atlatır gibi görünüyor.

+0

+1. Projeler için tüm AnyCPU yapılandırmalarını kaldırmıştı, ancak MSBuild hala oluştururken AnyCPU seçmeye çalışıyordu. AnyCPU yapılandırmasını çözümden sildi ve şimdi istediğimi x86 seçiyor. – reduckted

+0

'Win32' C++ projeleri içindir, ancak soru C# projeleriyle ilgilidir, çünkü x # için bahseder; –

6

MSBuild seçmiyor, ancak MSBuild projesini oluşturduğu proje belirli özellikleri varsayılan olarak ayarlayabilir. Sorunun, MSBuild'in bir çözüm dosyası oluşturmasıyla ilgili olduğunu varsayıyorum.

msbuild.exe "somesolution.sln" /t:Build 

Çözümü oluşturan projelere bakmanız gerekiyor, orada ayarlanan özellikleri göreceksiniz. Örneğin muhtemelen proje dosyasının en azından aşağıdaki göreceksiniz:

<PropertyGroup> 
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> 
    ... 
</PropertyGroup> 

Bu diğerleri arasında iki özelliği, Configuration ve Platform içeren PropertyGroup göstermektedir. Değerleri Condition'a göre ayarlanır. Durum, "Configuration" özelliği için herhangi bir değer ayarlanmamışsa, varsayılan olarak 'Hata Ayıklama' yapması gerektiğini belirtir. Benzer şekilde, Platform için hiçbir şey ayarlanmamışsa, varsayılan olarak AnyCPU olmalıdır.

Ayrıca görebilirsiniz bir ConditionalPropertyGroup:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
    ... 
</PropertyGroup> 

Ne bu durum diyor mülkiyet Configuration ve Platform maç Debug ve AnyCPU o zaman içinde bulunan özelliklerin tümünü geçerli olmalıdır eğer olmasıdır.

Dikkat edilmesi gereken bir nokta, özellik adlarının yalnızca rastgele bir ad olması ve değerlerin yalnızca dizeler olmasıdır. Ancak .Net projeleri oluşturulurken, bu özelliklerin ve değerlerinin bir parçası olduğu bir sözleşme var. Varsayılan değerlerin ne olduğunu görmek için her projeyi bir metin düzenleyicide açmanız gerekmez. Visual Studio'ya gidebilir ve çözüm konfigürasyonuna bakabilirsiniz.

Visual Studio Solution Configuration

+0

Uzun bir açıklama için teşekkürler, ancak çizginin bir adım aşağısın. Evet, "msbuild mysolution.sln/t: Build" gibi bir şeye bakıyorum, msbuild daha sonra hangi projelerin var olduğunu kontrol ediyor ve bunları Configuration | Platform ayarlarına göre oluşturmaya başlıyor. Sln dosyası daha sonra Config | Platformunu Config | Platform projesine eşler. Benim sorum, hangi çözümün Config | Platformunun varsayılan olarak seçildiğidir. Çözüm satırında bu satıra atıfta bulunuyorum: Yapı çözüm yapılandırma "Hata ayıklama | Karma Platformlar". – Elephantik

+1

@Elephantik Çözümün oluşturduğu metaproj dosyasına bakarsanız, MSBuild'i bir yapılandırma/platformda geçmeden tek bir projede aramış olsaydınız aynı şeyi görürsünüz. Yani, eğer varsayılan yapılandırma/platform bir soln içinde bulunan birden fazla projede farklıysa. ve bir yapılandırma/platformda kendiniz geçmezsiniz, bu projelerde tanımlanan varsayılanları çağırır. SolutionConfigurationPlatforms biti için – Ci3