2016-09-12 21 views
5

Yapı sistemimizi VS 2013'ten 2015 Güncelleştirme 2'ye yükselttik ve yapım sürelerimiz önemli ölçüde arttı. Oluşturma ortamımız bağımsızdır, bu yüzden MSBuild'i yüklü bir konumdan ziyade bir paketden (devpath kullanarak) çalıştırırız. Günlüklere bakıldığında, derlenme sırasındaki artışın hemen hemen tüm csc derleme görevi olduğu görülür. MSBuild'i makineye yüklemek hiçbir etkiye sahip değildir, ancak kendi kendine yeten konumdan ziyade kurulu konumdan çalıştırırsak, yapım süreleri 2013'te gördüğümüzle benzerdir. Yüklü bir konumdan çalışırken, paylaşılan bir uyumluluğun olduğunu görebiliriz. "" adlı dizinden derleyici ile paylaşılan derleme kullanma: C: \ Program Files (x86) \ MSBuild \ 14.0 \ bin ". Şu anda, paylaşımlı derlemeyi etkinleştirmenin yapım süreleriyle ilgili yardımcı olacağı izlenimine sahibiz, ancak kendi bağımsız ortamımızdan çalışmayı başaramadık. "UseSharedCompilation" öğesinin true olarak ayarlanması, hiçbir etki yaratmaz ve yapı sırasında yukarıdaki iletiyle sonuçlanmaz.Bağımsız bir derleme ortamında Roslyn ile Paylaşılan Derlemeyi Kullanma?

MSBuild'i kurulu konumdan başka bir yoldan çalıştırırken Roslyn ile paylaşılan derlemeyi etkinleştirmenin bir yolu var mı?

+0

Artık aynı sorunu VS 2017 güncellememiz için 2015'ten beri görüyoruz. Hiç bir çözüm buldunuz mu? – GaTechThomas

+1

Evet, yaptık. Paylaşılan derleme bizim sorunumuz değildi. Nihayetinde csc.exe üzerinde ngen.exe'yi çalıştırmak gerekiyordu ve buna bağlı olarak dll'nin büyük bir kısmı. Bu onları önceden derler, böylece her bir exe çağrısı için JIT derlemesi olmaz. Visual Studio, bunu yüklediğinizde yapar, ancak bunları başka bir dizine koyarsanız, bunları konuma göre göründüğü gibi tekrar yapmanız gerekir. Oldukça hızlı olduğu için gerekli dosyaları ngen çalıştırmak için liste penceresini açtığımızda bir adım ekledik. Olmadan csc.exe her çağrı için yaklaşık 10 saniye sürüyordu. – Jperrigo

+0

@Jperrigo: Bunu sorunun cevabı olarak eklemelisiniz. –

cevap

3

"Csc" görevini tamamen geçersiz kılmayı denediniz mi? Preprocess (yani, "/pp:out.txt") anahtarını kullanarak komut satırından örnek bir CSharp projesini değerlendirdim, "out.txt" dosyasını açtı ve "UseSharedCompilation" öğesine yapılan tek başvurunun tek bir şekle sahip olduğunu fark ettim. veya Csc derleme görevi ile ilgili bir başka.

GitHub.com'daki tüm metin dosyalarının karanlıkta aranması, E! UseSharedCompilation gerçek Hollywood hikayesi. Aşağıdaki Nuget Paket 'Microsoft.Net.Compilers' dan:

<!-- The UsingTask, UseSharedCompilation, and ToolPath/Exe variables all interact to 
    choose which compiler path to use and whether or not to use the compiler server. 
    If UsingTask and UseSharedCompilation are set then the compiler server next to the 
    task will be used (i.e., the one in this package). 
    If UseSharedCompilation is false or ToolPath/Exe are set the compiler server will 
    not be used and the compiler exe at the ToolPath, if set, will be executed, otherwise 
    the executable in the MSBuild install path will be executed. --> 

Yani, yukarıdaki XML Yoruma göre sen ile kendine yeten derleme ortamını gerçekleştirmek için bazı MSBuild kandırmaca istihdam zorunda kalacak " UseSharedCompilation". Yukarıdaki snippet'in tam metni için bkz. https://raw.githubusercontent.com/dotnet/roslyn/c5b249b16f7d67ee1645a1b75fa3de6f16314672/build/NuGetAdditionalFiles/Microsoft.Net.Compilers.props.

+0

Aslında derleyici sunucusunu ayarlayan ve Paylaşılan Derleme'yi kullanarak işleyen Csc görevinin (Microsoft.Build.Tasks.CodeAnalysis.dll'de yaşayan) olduğuna inanıyorum. Paylaşılan derleme çalışması yapmamız gerekiyor, bu yüzden Roslyn'in Csc görevini kullanmak istiyoruz. Yapmamıza entegre edildikten sonra çalışıp çalışmayacağını görmek için yukarıda bahsettiğiniz (Microsoft.Net.Compilers) NuGet paketi ile test etmem gerekiyor. – Jperrigo

1

Paylaşılan derlemenin bizim sorunumuz olmadığı ortaya çıkıyor. Nihayetinde csc.exe üzerinde ngen.exe'yi çalıştırmak gerekiyordu ve buna bağlı olarak dll'nin büyük bir kısmı. Bu onları önceden derler, böylece her bir exe çağrısı için JIT derlemesi olmaz. Visual Studio, bunu yüklediğinizde yapar, ancak bunları başka bir dizine koyarsanız, bunları konuma göre göründüğü gibi tekrar yapmanız gerekir. Oldukça hızlı olduğu için gerekli dosyaları ngen çalıştırmak için liste penceresini açtığımızda bir adım ekledik. Olmadan csc.exe her çağrı için yaklaşık 10 saniye sürüyordu.

+0

İşlemi tamamlamak için kendi cevabınızı kabul etmelisiniz ve sonra bitirdiniz :) –

+0

Aslında, paylaşılan derlemeyi kullanmak daha iyi bir çözümdür: JIT, tüm çözüm başına bir kez uygulandığında az miktarda zaman ekler. Öte yandan, derleyiciyi ngen 'edseniz bile hala csc.exe proje oluşturma için ödeme yaparsınız. Benim deneylerimde, zamanlar şu şekildedir: ~ 3 dakika w ve ngen ve SC ile; 1:05 ngen ve w/o SC ile; 0:45 ngen ve SC ile; İkisi de 0:40. –

İlgili konular