2015-05-16 6 views
8

Właśnie przeszedł jeden z moich projektów i użył kilka nowych funkcji C# 6, takich jak operator propagacji zerowej handler?.Invoke(null, e), który buduje w Visual Studio. Jednak gdy uruchomię mój skrypt do publikowania na pakiety Nuget, otrzymuję błędów kompilacji mówiąc:NuGet Pack -Build wydaje się nie rozumieć C# 6.0

EventName.cs(14,66): error CS1056: Unexpected character '$' 
EventName.cs(69,68): error CS1519: Invalid token '=' in class, struct, or interface member declaration 
EventName.cs(69,74): error CS1520: Method must have a return type 

Wydaje Nuget używa starszej wersji kompilatora, ale zastanawiałem się, czy ktoś wiedział obejść lub konfiguracja, którą można ustawić w celu rozwiązania problemu.

+0

NuGet nie powinien kompilować niczego. Domyślam się, że problem jest w twoim scenariuszu. – svick

+0

@svick Skrypt pozostał niezmieniony, jedyną zmianą było użycie funkcji C# 6.0. Proszę sprawdzić sam skrypt, ale po prostu wywołując CLI nuget - https://github.com/G3N7/LAN.Core.Eventing/blob/master/NugetBuild.cmd – Gent

+1

Niestety, nie wiedziałem o tym ' -Build' opcja (i jakoś tęskniłem za tym w twoim tytule). Myślę, że rozwiązaniem byłoby nie używać tego. – svick

Odpowiedz

2

Wygląda na to, że również ten błąd w Nuget który nadal nie jest rozwiązany: https://github.com/NuGet/Home/issues/1107

Można użyć następującego rozwiązania:

  1. zmodyfikować skrypt do budowania projektu przy użyciu poprawne wersja MSBuild - wystarczy zadzwonić pod numer MSBuild.exe, podać ścieżkę do pliku csproj lub sln i samodzielnie zbudować projekt w poprawnej konfiguracji.

  2. Utwórz plik nuspec, który opisuje twoją paczkę (https://docs.nuget.org/create/nuspec-reference). Możesz użyć aplikacji Eksplorator pakietów Nuget. Użyj bibliotek DLL utworzonych w kroku 1.

  3. Użyj nuget pack mypackage.nuspec do zbudowania paczki.

+0

Wyżej wymieniony problem Github został rozwiązany, teraz możesz określić, której wersji MSBuild użyć. Dziękuję bardzo za te informacje! – Gent