2016-03-25 22 views
9

Wie verwendet man C# 6.0 Features ohne Visual Studio?C# 6.0 ohne Visual Studio

Die folgende C# 6.0 Code funktioniert nicht:

using static System.Console; 

class Program 
{ 
    static void Main() 
    { 
     WriteLine("Hello world!"); 
    } 
} 

Hier ist der Fehler:

>csc CS6.cs 
Microsoft (R) Visual C# Compiler version 4.6.1055.0 
for Microsoft (R) .NET Framework 4.5 
Copyright (C) Microsoft Corporation. All rights reserved. 

CS6.cs(1,7): error CS1041: Identifier expected; 'static' is a keyword 
CS6.cs(1,14): error CS1518: Expected class, delegate, enum, interface, or struct 

Hier ist der C# -Code zu determine which .NET Framework versions are installed:

using System; 
using Microsoft.Win32; 

class RegistryVersion 
{ 
    private static void GetVersionFromRegistry() 
    { 
     // Opens the registry key for the .NET Framework entry. 
      using (RegistryKey ndpKey = 
       RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, ""). 
       OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\")) 
      { 
       // As an alternative, if you know the computers you will query are running .NET Framework 4.5 
       // or later, you can use: 
       // using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, 
       // RegistryView.Registry32).OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\")) 
      foreach (string versionKeyName in ndpKey.GetSubKeyNames()) 
      { 
       if (versionKeyName.StartsWith("v")) 
       { 

        RegistryKey versionKey = ndpKey.OpenSubKey(versionKeyName); 
        string name = (string)versionKey.GetValue("Version", ""); 
        string sp = versionKey.GetValue("SP", "").ToString(); 
        string install = versionKey.GetValue("Install", "").ToString(); 
        if (install == "") //no install info, must be later. 
         Console.WriteLine(versionKeyName + " " + name); 
        else 
        { 
         if (sp != "" && install == "1") 
         { 
          Console.WriteLine(versionKeyName + " " + name + " SP" + sp); 
         } 

        } 
        if (name != "") 
        { 
         continue; 
        } 
        foreach (string subKeyName in versionKey.GetSubKeyNames()) 
        { 
         RegistryKey subKey = versionKey.OpenSubKey(subKeyName); 
         name = (string)subKey.GetValue("Version", ""); 
         if (name != "") 
          sp = subKey.GetValue("SP", "").ToString(); 
         install = subKey.GetValue("Install", "").ToString(); 
         if (install == "") //no install info, must be later. 
          Console.WriteLine(versionKeyName + " " + name); 
         else 
         { 
          if (sp != "" && install == "1") 
          { 
           Console.WriteLine(" " + subKeyName + " " + name + " SP" + sp); 
          } 
          else if (install == "1") 
          { 
           Console.WriteLine(" " + subKeyName + " " + name); 
          } 
         } 
        } 
       } 
      } 
     } 
    } 

    static void Main() 
    { 
     GetVersionFromRegistry(); 
    } 
} 

Hier ist der Ausgang für den C# -Code um festzustellen, welche .NET Framework-Versionen installiert sind:

>csc FrameworkVersion.cs 
Microsoft (R) Visual C# Compiler version 4.6.1055.0 
for Microsoft (R) .NET Framework 4.5 
Copyright (C) Microsoft Corporation. All rights reserved. 

>FrameworkVersion.exe 
v2.0.50727 2.0.50727.4927 SP2 
v3.0 3.0.30729.4926 SP2 
v3.5 3.5.30729.4926 SP1 
v4 
    Client 4.6.01055 
    Full 4.6.01055 
v4.0 
    Client 4.0.0.0 

Bitte beachten Sie, dass diese Frage zu ohne Visual Studio/IDE C# 6.0 ist.

+0

Wie kompilieren Sie das ohne Visual Studio? Könnten Sie Ihren Build-Befehl einschließen? –

+0

Schauen Sie sich diese Frage an: http://stackoverflow.com/questions/31875825/how-to-run-roslyn-instead-scc-exe-from-command-line Es ist wahrscheinlich das gleiche. Höchstwahrscheinlich haben Sie die falsche Version (von falschem Pfad) von csc.exe –

+0

Bitte beachten Sie, dass dies die Eingabeaufforderung und .NET Framework 4.6 (NDP461-KB3102436-x86-x64-AllOS-ENU.exe) und nicht Visual Studio verwendet . – Impavid

Antwort

4

C# 6 ist nicht auf eine bestimmte Framework-Version aufgebaut, es hängt alles vom Compiler ab. Wenn Sie den C# 6-Compiler verwenden, können Sie dieses Snippet kompilieren.

Stellen Sie sicher, dass Sie die neueste MSBuild-Version auf Ihrem Build-Computer installiert haben (sie haben den Compiler aus dem Framework-Ordner verschoben). Diese Installation enthält den neuesten Compiler. (Clients müssen nicht die neueste Framework-Version ausführen, wenn Ihr Projekt für eine niedrigere Framework-Version erstellt wurde.)

Sie können das NuGet-Paket des Compilers auch mit der NuGet-Befehlszeile installieren.

Nützliche Informationen:

3

Ihr Problem ist, mit dem Compiler

>csc CS6.cs 
Microsoft (R) Visual C# Compiler version -->4.6.1055.0<-- 
for Microsoft (R) .NET Framework 4.5 

Sie verwenden die 4.6-Compiler, wenn Sie die 6-Compiler benötigen.

C# 6 Compiler mit Visual Studio installiert ist, sieht aber aus wie jemand es unabhängig von IDE

https://social.msdn.microsoft.com/Forums/vstudio/en-US/9959d4c1-16fe-45bc-9535-7b0775d26e9a/please-confirm-c-60-compiler-is-not-installed-with-net-framework-46-if-so-location?forum=csharpgeneral

http://www.microsoft.com/en-us/download/details.aspx?id=48159 Microsoft Build Tools 2015 It says it only depends on .NET Framework 4.5... I guess the Roslyn-based C# 6.0 compiler can target .NET Framework 4.5? What is this thing's relationship to the .NET Framework 4.6 Targeting pack? Will that install this? Or are both needed? And like I said, can I compile using C# 6 language features in VS2013?
2

Versuchen zu installieren verwalteten Compiler von diesen Orten zu verwenden:

%ProgramFiles(x86)%\MSBuild\12.0\Bin\ 
%ProgramFiles(x86)%\MSBuild\12.0\Bin\amd64\ 
%ProgramFiles(x86)%\MSBuild\14.0\Bin\ 
%ProgramFiles(x86)%\MSBuild\14.0\Bin\amd64\