我有一些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。保留所有权利。
答案 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
,我可以在命令行执行以下操作:
然后,MSBuild将在该解决方案中构建任何设置为C:\ Users \ Me \> CD \\ C:\> CD Windows \ Microsoft.NET \ Framework \ v3.5
C:\ Windows \ Microsoft.NET \ Framework \ v3.5 \> MSBuild / p:Configuration = debug
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)
您可能有一个环境变量指向错误的框架版本