Msbuild'i C # 6'ya nasıl yükseltebilirim?


106

Projemde C # 6 kullanmak istiyorum (boş yayılım, diğer özellikler).

Bilgisayarıma VS 2015 yükledim ve harika çalışıyor ve aşağıdaki gibi test kodu oluşturuyor:

var user = new SingleUserModel(); //all model fields are null
var test = user.User?.Avatar?["blah"];

Ancak projemi depoya ittiğimde ve CI onu inşa etmeye başladığında, desteklenmediği için inşa başarısız oluyor ?.

VS2015'i CI sunucusuna da kurdum ama kullanmıyor gibi görünüyor. Ne yapabilirim?

CI - CruiseControl .NET, C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe


3
Aşağıda verilen bağlantılardan MS Build Tools 2015'i indiren herkes için, bunlar hatalar içeren eski (ön güncelleme) bir sürüm içindir ... Burada 2015 Güncellemesi 3'e bir bağlantı buldum
bdrajer

Yanıtlar:


164

Aradığınızdan emin olun:

C:\Program Files (x86)\MSBuild\14.0\Bin\MsBuild.exe

Bu, Visual Studio 2015 ile birlikte gelen ve bunu anlayan C # derleyicisini çağıran MsBuild sürümüdür. MsBuild'in bu sürümünü, Visual Studio 2015'in herhangi bir sürümünü yükleyerek veya bağımsız Microsoft Build Tools 2015'i yükleyerek sisteminizde edinebilirsiniz .

Bir başvuru ekleme aşağıdaki Nuget paket , yeni derleyicinin kullanımını da zorlar:

Install-Package Microsoft.Net.Compilers

Install-Package'ın aradığınız sürüm olmayabilecek mevcut en son sürümü seçeceğini lütfen unutmayın. Yüklemeden önce, ele alınan sürümle ilgili temel sorunu çözmek için lütfen sürüm notlarını ve bağımlılıkları kontrol edin; bu durumda, bu durumda VS 2015'e daha özeldir.

Yani Visual Studio 2015 için:

Install-Package Microsoft.Net.Compilers -Version 1.0.0

2
RyuJIT'den bu yana hatalara neden olan veya bu kadar çok hata içeren herhangi bir endişeniz var mı?
Maslow

3
Bununla ilgili bir not, PATH env değişkeninizi güncelliyorsanız, eski konumu (örn: C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319) kaldırdığınızdan emin olun çünkü yine de "msbuild "
cmd'den

2
Ayrıca nuget paketi Microsoft.Net.Compilers'ı kurmam gerekiyordu: bkz. Stackoverflow.com/a/36774876/584714
DrGriff

2
Her projeye bir nuget paketi yüklemek zorunda kalmadan bunun bir çözümü var mı? Buna ihtiyaç duyacak 100'lerce projem var ve bana gereksiz görünüyor. Bir yerlerde böcek gibi görünüyor.
Cole W

2
@ColeW sorusu için bir cevabı olan var mı?
Zinov

61

Bu arada, derleme sunucunuza VS2015 yerine "Microsoft Derleme Araçları 2015" i de kurabilirsiniz.

https://www.microsoft.com/en-us/download/details.aspx?id=48159

MSBuild'i aynı yola yükler:

C:\Program Files (x86)\MSBuild\14.0\Bin\MsBuild.exe

IMHO'nun bir nedeni var, sorunun neden bu çevreyle ilgili olduğu. Soruya bir yorum yapsan iyi olur.
jogo

24
Stackoverflow, sorular hakkında yorum yapmama izin vermediğinden, sistemin bana izin verdiği tek yol olarak yayınladım. Ve eğer yararlı bulmazsanız, görmezden gelin. Benim için derleme sunucumda çözüm ararken, VS2015
MuhKuh

"Microsoft Build Tools 2015" (veya "Microsoft Build Tools 2017") yükledikten sonra, çözümü oluşturmak için hangi Visual Studio sürümünü kullanmak istediğinizi de kontrol edebilirsiniz: MSBuild.exe / t: Build YourSolution.sln / p : VisualStudioVersion = 14.0 [VS2010 için 10.0, VS2015 için 14.0 ve VS2017 için 15.0 olarak ayarlayın]
Alex Sanséau

Microsoft Build Tools 2015 Update 3'ü indirmek ve yüklemek için lütfen eski VS yüklemelerini ziyaret edin ve Redistributables and Build Toolsbölüme gidin .
MHK

12

Muhtemelen bunu zaten çalıştırıyorsunuz, ancak bu gelecekte başka birine yardımcı olabilir. Son zamanlarda bu soruyla karşılaştım ve beni doğru yönde hareket ettirdi ve sonunda bir çözüme götürdü.

Bunun bir başka olası çözümü, projelerinizin oluşturulmasını istediğiniz MSBuild sürümünü hedeflemek için proje dosyalarınızı manuel olarak güncellemektir.

Yakın zamanda bir TeamCity derleme sunucusu güncellemesinden geçtim ve üzerine Microsoft Derleme Araçları 2015'i zaten yükledim. Yapı sunucusunda her şeyin yerinde olduğunu sanıyordum, çözümüm C # 6.0'ı hedefliyordu ve her projem .net 4.6.1'i hedefliyordu. Sizin gibi, C # 6.0'a özgü kod içeren her şey yerel ortamımda gayet iyi inşa edildi, ancak TeamCity oluşturma sunucum hiçbirini beğenmedi.

Başkalarının da bahsettiği gibi, Microsoft.Net.Compilers NuGet paketini kullanmayı denedim. En son sürümü, yapının derleme sunucumda çalışmasına izin verdi, ancak kodumu yerel olarak yayınlamama izin vermedi (benim bir gereksinimim). Bu NuGet paketinin önceki sürümleri yayımlamama izin verirdi, ancak derleme çalışmazdı.

Yapmam gereken şey, nihayetinde çözümümdeki her proje dosyasını, özellikle C # 6.0 kodunu işleyebilecek MSBuild sürümünü hedefleyecek şekilde değiştirmekti. Proje dosyalarımın her birinde aşağıdaki satıra benzer bir satır buldum:

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

bu satırın temel bileşeni, bunun ToolsVersion kısmıdır. Aşağıdakileri okumak için proje dosyalarımdaki bu satırı değiştirdim:

<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

Buradaki fark, 4 değil, sürüm 14'ü hedeflememdi. Sürüm 14.0, Build Tools 2015'e karşılık geliyor. Bunu değiştirerek, TeamCity derleme sunucum doğru MSBuild sürümünü kullandı ve C # 6.0 kodumu oluşturabildi.

Ayrıca, bunun TargetFrameworkVersion xml düğümünü 4.6.1 kullanmak için manuel olarak güncellemem gerekiyordu çünkü VS2015 bir şeyi doğru yapmıyordu ve yerel yapımı bozdu, ancak bu burada geçerli değil.

Lütfen, yanılıyorsam biri beni düzeltir, ama sadece referans için, sürüm numaralarının şuna benzer olduğunu düşünüyorum:

4.0 = VS2012

12.0 = VS2013

14.0 = VS2015

15.0 = VS2017

.Net 4.7'yi kullanmak istiyorsanız, Build Tools 2017'yi yüklemeniz ve projelerinizin 14.0 yerine 15.0'ı hedeflemesini sağlamanız gerektiğine inanıyorum, ancak bunu doğrulamadım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.