无法从常规命令提示符编译.cs文件,只能编译Developer Command Prompt?

时间:2016-10-02 21:03:06

标签: c# .net windows cmd visual-studio-2015

我使用Visual Studio开发了这个相当简单的控制台应用程序。有了它,我已经整理了一个简单的C#程序,其中使用"开发人员命令提示符VS2015"我导航到我的目录并运行" csc Program.cs"编译" Program.exe"文件。从那里我可以输入" Program ***"并传递一个文件名,例如" Program file.asm"。

一切都很完美。但是,我想从正常的命令提示符运行它。当我在VS2015的Developer Command Prompt中编译时,输出以下两行:

Microsoft (R) Visual C# Compiler version 1.3.1.60616
Copyright (C) Microsoft Corporation. All rights reserved.

当我导航时,我可以看到在C:\ Windows \ Microsoft.NET \ Framework下我有以下文件夹选项:

  • 1.0.3705
  • V1.1.4322
  • V2.0.50727
  • 3.0
  • V3.5
  • v4.0.30319

当我这样做时:

C:\ Windows \ Microsoft.NET \ Framework \ v3.5 \ csc.exe C:\ directory ... \ Program.cs

输出是:

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

c:\ Users \ directory ... \ Program.cs(5,24):错误CS0234:类型或命名空间名称'任务'命名空间中不存在System.Threading' (你错过了一个装配参考吗?)

然后我尝试使用v4.0.30319:

C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ csc.exe C:\ directory ... \ Program.cs

哪个输出:

用于C#5的Microsoft(R)Visual C#编译器版本4.6.1055.0 版权所有(C)Microsoft COrporation。版权所有。 此编译器作为Microsoft(R).NET Framework的一部分提供,但仅支持C#5以外的语言版本,而C#5不再是最新版本。对于支持较新版本的C#编程语言的编译器,请参阅http://go.microsoft.com/fwlink/?LinkID=533240 CSCD777AE6152014D6AAEC769E73B879B29.TMP:错误CS1567:生成Win32资源时出错:访问被拒绝。 wrning CS1610:无法删除临时文件&c; \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ CSCD777AE6152014D6AAEC769E73B879B29.TMP'用于默认Win32资源 - 系统找不到指定的文件。

任何人都可以帮助我理解为什么这对开发人员命令提示符一切正常,但即使在完全量化" csc.exe"

的路径时也无法获得常规命令提示符

1 个答案:

答案 0 :(得分:1)

我认为你在不了解正在发生的事情的情况下尝试了很多事情。

  

我已经整理了一个简单的C#程序,其中使用“VS2015的开发人员命令提示符”我导航到我的目录并运行“csc Program.cs”来编译“Program.exe”文件。

当您从此特定命令提示符运行C#编译器时,which它位于路径中。要找出正在运行的确切命令,在UNIX上,我们使用名为where的命令。您可以尝试gnu-utils或cygwin,或者只是手动迭代PATH(任何情况)变量中指定的所有目录,以找出有问题的csc.exe所在的确切路径。这样您就会知道编译器的确切路径是什么。 更新:您可以在Windows上使用csc.exe /?命令查找命令的完整路径(感谢@ScottChamberlain)

  

c:\ Users \ directory ... \ Program.cs(5,24):error CS0234:名称空间'System.Threading'中不存在类型或命名空间名称'Tasks'(你是否缺少一个程序集)引用?)

在同一提示符下运行/r并查看编译器支持的所有选项。其中一个是Program.cs,用于添加对dll的引用

  

当我这样做时:

     

C:\ Windows \ Microsoft.NET \ Framework \ v3.5 \ csc.exe C:\ directory ... \ Program.cs

     

CSCD777AE6152014D6AAEC769E73B879B29.TMP:错误CS1567:生成Win32资源时出错:访问被拒绝。 wrning CS1610:无法删除用于默认Win32资源的临时文件'c:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ CSCD777AE6152014D6AAEC769E73B879B29.TMP' - 系统无法找到指定的文件。

您可能希望进入文件/out的目录。这样,您就拥有了对文件夹的写权限,以生成必要的输出文件。您还可以使用set选项指定输出文件名

  

任何人都可以帮助我理解为什么这对开发人员命令提示符一切正常,但即使在完全量化“csc.exe”的路径时也无法获得常规命令提示符?

最有可能因为PATH环境变量不同。 Visual Studio命令提示符,在启动命令提示符后设置一堆环境变量。您可以通过在两个终端上运行C:\Program Files (x86)\Microsoft Visual Studio *\Common7\Tools\VsDevCmd.bat命令并对其输出进行差异来查看两个提示之间的环境差异。不用说,某些环境变量总是不同的,而不是VS.NET

正如@KeithNicholas在评论中提到的那样,您只需调用{{1}}来设置常规命令提示符,如visual studio命令提示符