如何在没有Visual Studio的系统上编译.NET 3.5 C#代码?

时间:2011-02-17 14:32:45

标签: c# .net-3.5

我有一些C#代码使用了一些特定于.NET 3.5的构造。安装.NET Framework发行版时,可以使用它安装C#编译器(csc.exe)。即使我在C:\ Windows \ Microsoft.NET \ Framework \ v3.5中指定csc.exe,我也无法在安装了.NET Framework 的计算机上编译代码,但不能在Visual工作室。我能够毫无困难地编译使用v2.0构造的代码。我怎么能做到这一点?

以下示例演示了我的问题:

using System;
class Program
{
    public static void Main()
    {
        // The MacOSX value to the PlatformID enum was added after
        // .NET v2.0
        if (Environment.OSVersion.Platform == PlatformID.MacOSX)
        {
            Console.WriteLine("Found mac");
        }
        Console.WriteLine("Simple program");
    }
}

使用csc.exe编译此代码时,收到以下错误:

test.cs(9,58):错误CS0117:'System.PlatformID'不包含'MacOSX'的定义

执行csc.exe /?时,我会收到横幅:

  

Microsoft(R)Visual C#2008编译器版本3.5.21022.8
  适用于Microsoft(R).NET Framework 3.5版   版权所有(C)Microsoft Corporation。保留所有权利。

4 个答案:

答案 0 :(得分:4)

  

Microsoft(R)Visual C#2008编译器版本3.5.21022.8

这是旧的,原始的.NET 3.5版本。 Service Pack 1有一个相当不幸的名字,有很多变化。我没有时间机器来检查它是否添加了MacOSX成员。时机恰好与Silverlight重合。

启用Windows Update或直接安装SP1。

答案 1 :(得分:3)

关于您的错误:

  

PlatformId.Xbox和   PlatformId.MaxOSX值是   在.NET Framework 2.0 SP2中引入,   3.0 SP2和3.5 SP1。

这可能就是为什么你不能使用命令行编译你的例子。安装SP1后,3.5 SP 1的版本号应如下所示:

  

Microsoft(R)Visual C#2008编译器版本3.5.30729.4926

关于Command-Line building,MSDN上有一整节。

  

如果您正在使用计算机   你只有.NET Framework SDK   可以在命令中使用C#编译器   如果您使用SDK命令行   提示,可从中获得   Microsoft .NET Framework SDK菜单   选项。

它还说明如果安装了多个版本的.NET Framework会发生什么:

  

通常是csc.exe可执行文件   位于   Microsoft.NET \框架\   系统目录下的文件夹。它的   位置可能会有所不同   任何个人的确切配置   电脑。这个的多个版本   可执行文件将出现在   计算机如果有多个版本   .NET Framework安装在   电脑。有关的更多信息   此类安装,请参阅Determining Which Version of the .NET Framework Is Installed.

示例

csc File.cs

就我而言,我可以这样做:

cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319>

csc somefile.cs

这应输出如下内容:

  

C:\的Windows \ Microsoft.NET \ Framework64 \ v4.0.30319> CSC

     

Microsoft(R)Visual C#2010编译器版本4.0.30319.1

     

版权所有(C)Microsoft Corporation。保留所有权利。

答案 2 :(得分:1)

您听说过MSBuild吗? =)

Visual Studio项目文件(引擎盖下)MSBuild文件,它也可以transform solution files到MSBuild文件中,这实际上意味着您可以从命令行使用MSBuild来构建Visual Studio解决方案。

例如,假设我有一个位于C:\Repositories\Work\MyProject\的项目,其关联的解决方案文件为MyProject.sln,我可以在命令行执行以下操作:

  

C:\ Users \ Me \> CD \\    C:\> CD Windows \ Microsoft.NET \ Framework \ v3.5
   C:\ Windows \ Microsoft.NET \ Framework \ v3.5 \> MSBuild / p:Configuration = debug

然后,MSBuild将在该解决方案中构建任何设置为debug配置构建的项目,并输出类似于以下内容的项目:

  

Microsoft(R)构建引擎版本   3.5.30729.4926 [Microsoft .NET Framework,版本2.0.50727.4952]   版权所有(C)Microsoft Corporation   2007.保留所有权利。

     

Build build 17/02/2011 14:55:49。   项目   “C:\库\工作\ MyProject的\ MyProject.sln”   在节点0上(默认目标)   构建解决方案配置   “调试| .NET”。项目   “C:\库\工作\ MyProject的\ MyProject.sln”   (1)正在建设“c   :\库\工作\ MyProject的\ MyProject的\ MyProject.csproj”   (2)在节点0(默认目标)上   处理0个EDMX文件。成品   处理0个EDMX文件。 CoreCompile:   跳过目标“CoreCompile”因为   所有输出文件都是最新的   响应输入文件。   CopyFilesToOutputDirectory:正在复制   文件从“obj \ Debug \ MyProject.dll”到   “BIN \ MyProject.dll”。 MyProject - >   C:\库\工作\ MyProject的\ MyProject的\ BIN \ Ultra.Clie   nt.dll从中复制文件   “obj \ Debug \ MyProject.pdb”来   “BIN \ MyProject.pdb”。完成建设   项目   “C:\库\工作\ MyProject的\ MyProject的\ Ultra.Cli   ent.csproj“(默认目标)。

     

Ultra_Client_Setup:项目   未选择“MyProject.Setup”   建立解决方案配置   “调试| .NET”。完成建筑项目   “C:\库\工作\ MyProject的\ MyProject.sln”   (def目标)。

     

构建成功。       0警告       0错误

     

时间流逝00:00:00.92

警告:MSBuild无法处理安装项目

答案 3 :(得分:0)

您可能有一个环境变量指向错误的框架版本