没有 Visual Studio 的 C# 6.0

标签 c#

如何在没有 Visual Studio 的情况下使用 C# 6.0 功能?

以下C# 6.0 Code不起作用:

using static System.Console;

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

这是错误:

>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

这是 determine which .NET Framework versions are installed 的 C# 代码:

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();
    }
}

这是用于确定安装了哪些 .NET Framework 版本的 C# 代码的输出:

>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

请注意,这个问题是关于 C# 6.0 没有任何 Visual Studio/IDE的。

最佳答案

C# 6 不是针对特定的框架版本构建的,它完全取决于编译器。如果您使用 C# 6 编译器,则可以编译该代码段。

确保您已在构建机器上安装最新的 MSBuild 版本(他们将编译器从框架文件夹中移出)。该安装包含最新的编译器。 (如果您的项目指定为构建较低的框架版本,则客户端不需要运行最新的框架版本)

您还可以使用 NuGet 命令行安装编译器 NuGet 包。

有用的资源:

关于没有 Visual Studio 的 C# 6.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36217527/

相关文章:

C# 在不加载整个内容的情况下获取响应的内容类型

c# - 如何将 sql 表中的多列分配给 List<> 中的单列

使用 WCF 身份验证服务的 C# MVC 身份验证.. 几个问题

c# - 如何让MVVM(WPF)中的输入控件相互通信?

c# - 如何使用传递给 C# 中当前方法的实现来实例化接口(interface)对象?

c# - 如何在 Crystal 报表中动态插入图片

c# - 使用命名空间与从命名空间显式调用类之间是否存在性能差异?

c# - 这是.Net 反射中的错误吗?

c# - 在c#中删除多种文件类型的文件

C# System.Buffer.BlockCopy 内存问题?