2016-03-25 14 views
9

Come utilizzare le funzionalità C# 6.0 senza Visual Studio?C# 6.0 senza Visual Studio

Il seguente C# 6.0 Code non funziona:

using static System.Console; 

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

Ecco l'errore:

>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 

Ecco il codice C# per 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(); 
    } 
} 

ecco l'output per il codice C# per determinare quali versioni di .NET Framework sono installate:

>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 

prega di notare che questa domanda è su C# 6.0 senza di Visual Studio/IDE.

+0

Come lo compili senza Visual Studio? Potresti includere il comando di compilazione? –

+0

Guarda questa domanda: http://stackoverflow.com/questions/31875825/how-to-run-roslyn-instead-csc-exe-from-command-line Probabilmente è lo stesso. Molto probabilmente si sta eseguendo la versione errata (dal percorso errato) di csc.exe –

+0

Si noti che questo utilizza Command Prompt e .NET Framework 4.6 (NDP461-KB3102436-x86-x64-AllOS-ENU.exe) e non Visual Studio . – Impavid

risposta

4

C# 6 non è costruito per una specifica versione del framework, tutto dipende dal compilatore. Se si utilizza il compilatore C# 6, è possibile compilare quello snippet.

Assicurarsi di aver installato l'ultima versione di MSBuild sul computer di compilazione (hanno spostato il compilatore dalla cartella framework). Quell'installazione contiene l'ultimo compilatore. (I client non devono eseguire la versione più recente del framework se il progetto è specificato per la versione di un framework inferiore)

È anche possibile installare il pacchetto NuGet del compilatore utilizzando la riga di comando NuGet.

Risorse utili:

3

Il tuo problema è con il compilatore

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

Si utilizza il compilatore 4.6 quando è necessario il compilatore 6.

C# 6 compilatore viene installato con Visual Studio, ma sembra che qualcuno è riuscito a installarlo indipendentemente 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

tenta di utilizzare compilatori da queste posizioni:

%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\ 
Problemi correlati