2010-08-27 33 views
9

64 bit makinede MSBuild (v4.0) kullanarak bir proje oluşturmaya çalışıyorum. Nedense, MSBuild 32 bitlik bir uzantı yüklemeye çalışıyor ve nedenini anlayamıyorum. Sorunu göstermek için sorunu en küçük kümeye indirdim. Aşağıdaki MSBuild proje dosyasını kullanarak64 bit MSBuild 32 bit uzantıları neden yükleniyor?

:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> 
    <Target Name="test"> 
     <Message Text="bin path: $(MSBuildBinPath)" /> 
     <Message Text="extensions path: $(MSBuildExtensionsPath)" /> 
     <Message Text="extensions path (x86): $(MSBuildExtensionsPath32)" /> 
     <Message Text="extensions path (x64): $(MSBuildExtensionsPath64)" /> 
    </Target> 
</Project> 

bu çıktıyı almak:

Microsoft (R) Build Engine Version 4.0.30319.1 
[Microsoft .NET Framework, Version 4.0.30319.1] 
Copyright (C) Microsoft Corporation 2007. All rights reserved. 

Build started 8/27/2010 9:56:35 AM. 
Project "D:\5\test.proj" on node 1 (default targets). 
test: 
    bin path: C:\Windows\Microsoft.NET\Framework64\v4.0.30319 
    extensions path: C:\Program Files (x86)\MSBuild 
    extensions path (x86): C:\Program Files (x86)\MSBuild 
    extensions path (x64): C:\Program Files\MSBuild 
Done Building Project "D:\5\test.proj" (default targets). 


Build succeeded. 
    0 Warning(s) 
    0 Error(s) 

Time Elapsed 00:00:00.03 

MSBuild besbelli 32bit ve 64bit uzantıları yolu biliyor ve ikili yoldan bu açıkça görünüyor 64-bit MSBuild.exe çalıştırıyorum, ancak bazı nedenlerden dolayı uzantılaryerine Program Files (x86) yüklenmelidir. Yüklemem gereken bir uzantıya sahip olduğumdan, bu 32 bit/64 bit işleminde doğru bir şekilde yüklenmesi GEREKTİRİR ve yükleme yapmayacaktır (MSBuild, 64 bit işlemle 32bit sürümünü yüklemeye çalışıyor).

Neden?

cevap

14
Microsoft Connect'te ben filed a bug

ve bu açıklama ile, "By Design" olarak kapatıldı: - bu değişti ve açık konuşmak gerekirse, artık yanlış

Sen haklısın. Ancak, bu bilinçli bir karardı. Değiştirilmesinin nedeni, diğer ürünler tarafından yüklenen çok sayıda uzantının (.targets dosyaları gibi) yalnızca 32 bit program dosyalarında kurulduğudur. 64 bit senaryoları öngörmediler, ancak genellikle 64 bit MSBuild'de gayet iyi çalışıyorlardı. Bir kullanıcı 64 bit MSBuild çalıştığında, bu oldukça yaygındır, çünkü Team Build 2010 için varsayılan değerdir, MSBuildExtensionsPath geçmişte beklediğiniz gibi 64 bit Program Dosyalarına çözülecektir. Ancak bu, tüm .targets dosyalarının daha uzun sürmediği ve yapının başarısız olduğu anlamına geliyordu. Tüm bu ürünlerin kurulum belgelerini düzeltmek, özellikle de müşterilere zaten gönderildiği için pratik değildi. Bu nedenle, MSBuildExetnsionsPath öğesinin her zaman 32 bit konumuna işaret etmesi için yapılan değişikliği yaptık. Neredeyse hiç kimse 64 bit yerini gerçekten istemiyor ve bu insanlar MSBuildExtensionsPath64 olarak değişebilir. Burada gerçekten en kötü seçeneğin bir soruydu.

ben delil olarak kabul ama sonuca katılmıyorum. Kırık montajcıların yazarlarının, uzantılarının 64 bitlik makinelerde çalışmamasını hak ettiğine inanıyorum.

İlgili konular