【问题标题】:How can I compile .NET 3.5 C# code on a system without Visual Studio?如何在没有 Visual Studio 的系统上编译 .NET 3.5 C# 代码?
【发布时间】:2011-06-29 03:39:19
【问题描述】:

我有一些使用特定于 .NET 3.5 的结构的 C# 代码。当您安装 .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) 微软公司。保留所有权利。

【问题讨论】:

  • 不使用 Visual Studio 编译应该没问题。您能否举例说明您要编译的内容以及遇到的错误?没有这些信息,我们就瞎了眼……
  • 如果您可以扩展“我无法在安装了 .NET Framework 的计算机上编译代码”会很有帮助,csc 返回什么错误?跨度>
  • 输入 csc.exe 是什么版本?它显示的是 3.5.* 版本的编译器还是 2.0?
  • 附带说明,如果因为 VisualStudio 价格昂贵而无法安装但您可以安装 IDE,请查看:SharpDevelop
  • @digEmAll,或者确实是 Visual Studio Express! =)

标签: c# .net-3.5


【解决方案1】:

关于您的错误:

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

MSDN 上有一整段关于Command-Line building

如果您使用的计算机 只有.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。保留所有权利。

【讨论】:

  • @Filip,在没有安装 Visual Studio 的机器上不会有VSVARS32.BAT,正如 OP 所指出的那样
  • 我已经更新了我的答案。它仍然不能解决他的问题并且应该投反对票吗?
  • 问题不在于我需要一个关于如何使用 csc.exe 从命令行构建的教程。我很清楚如何做到这一点。您的原始答案(在您编辑之前)没有给我任何我没有的信息。
  • @JimEvans,在您提供有关您的实际问题的更多信息之后。我编辑了我的答案,并给了你一个正确的答案,说明它为什么不适合你。
【解决方案2】:

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

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

启用 Windows 更新或直接安装 SP1。

【讨论】:

【解决方案3】:

你听说过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) 微软公司 2007. 保留所有权利。

构建于 2011 年 2 月 17 日 14:55:49 开始。 项目 “c:\repositories\work\MyProject\MyProject.sln” 在节点 0(默认目标)上。
构建解决方案配置 “调试|.NET”。项目 “c:\repositories\work\MyProject\MyProject.sln” (1) 正在建设“c :\repositories\work\MyProject\MyProject\MyProject.csproj" (2) 在节点 0(默认目标)上。
处理 0 个 EDMX 文件。完成的 处理 0 个 EDMX 文件。核心编译: 跳过目标“CoreCompile”,因为 所有输出文件都是最新的 相对于输入文件。 CopyFilesToOutputDirectory:复制 文件从“obj\Debug\MyProject.dll”到 “bin\MyProject.dll”。我的项目-> c:\repositories\work\MyProject\MyProject\bin\Ultra.Clie nt.dll 复制文件 “obj\Debug\MyProject.pdb”到 “bin\MyProject.pdb”。完成建筑 项目 "c:\repositories\work\MyProject\MyProject\Ultra.Cli ent.csproj"(默认目标)。

Ultra_Client_Setup:项目 未选择“MyProject.Setup” 构建解决方案配置 “调试|.NET”。完成建筑项目 “c:\repositories\work\MyProject\MyProject.sln” (默认目标)。

构建成功。 0 个警告 0 个错误

经过时间 00:00:00.92

警告:MSBuild 无法处理设置项目

【讨论】:

  • +1,很好的解决方案。我最近需要以编程方式构建一个 DLL;我使用 MSBuild 来完成,它甚至可以在没有安装 .NET SDK 的机器上运行
  • @Thomas,是的 - MSBuild 是一个默默无闻的英雄,它让很多事情的生活变得轻松很多,我希望有更多的认识!
  • MSBuild 也包含在我发布的关于命令行构建的链接中。
  • MSBuild 虽然是一个很棒的工具,但不适合我工作的环境。项目的构建系统是这样的,直接调用 csc 是正确的选择。
【解决方案4】:

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

【讨论】:

    猜你喜欢
    • 2011-05-28
    • 2015-05-06
    • 2012-03-22
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    相关资源
    最近更新 更多