无法从常规命令提示编译.cs文件,只能从开发人员命令提示编译

本文关键字:编译 提示 命令 开发 cs 常规 文件 | 更新日期: 2023-09-27 18:11:23

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

一切都很顺利。但是,我想从正常的命令提示符运行它。当我在VS2015的开发人员命令提示符中编译时,输出如下两行:

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

当我导航时,我可以在c:' windows '微软下看到它. NET'Framework我有文件夹选项:

  • v1.0.3705
  • v1.1.4322
  • v2.0.50727
  • v3.0
  • v3.5
  • v4.0.30319

当我这样做的时候:

C: ' Windows ' Microsoft.NET ' Framework ' v3.5 ' csc.exe C: '目录…' Program.cs

输出是:

Microsoft (R) Visual c# 2008 Compiler Version 3.5.30729.5420 for Microsoft (R) .NET Framework Version 3.5微软公司版权所有。版权所有

c:'Users'directory…'Program.cs(5,24):错误CS0234:类型或命名空间名称"Tasks"在命名空间"System"中不存在。

我然后尝试v4.0.30319:

C: ' Windows ' Microsoft.NET ' Framework ' v4.0.30319 ' csc.exe C: '目录…' Program.cs

输出:

Microsoft (R) Visual c# Compiler Version 4.6.1055.0 for c# 5微软公司版权所有。版权所有。这个编译器是作为Microsoft (R) . net框架的一部分提供的,但只支持最高到c# 5的语言版本,而c# 5已经不是最新版本了。有关支持新版本c#编程语言的编译器,请参阅http://go.microsoft.com/fwlink/?LinkID=533240CSCD777AE6152014D6AAEC769E73B879B29.TMP: error CS1567:错误生成Win32资源:Access is denied运行CS1610:无法删除临时文件'c:'Windows' microt.net 'Framework'v4.0.30319'CSCD777AE6152014D6AAEC769E73B879B29.TMP'作为默认的Win32资源——系统无法找到指定的文件。

谁能帮助我理解为什么这一切都工作良好的开发人员命令提示符,但失败的常规命令提示符,即使完全量化路径"csc.exe"?

无法从常规命令提示编译.cs文件,只能从开发人员命令提示编译

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

我把一个简单的c#程序放在一起,使用" vs2015的开发人员命令提示符"我导航到我的目录,运行"csc Program.cs"编译"program .exe";文件。

当你从这个特定的命令提示符运行c#编译器时,csc.exe在路径中。为了找出正在运行的确切命令,在UNIX上,我们使用一个名为which的命令。您可以尝试gnu-utils或cygwin,或者只是手动遍历PATH(任何情况下)变量中指定的所有目录,以找出有问题的csc.exe所在的确切路径。这样您就可以知道编译器的确切路径。UPDATED:您可以在windows上使用where命令来查找命令的完整路径(感谢@ScottChamberlain)

c:'Users'directory…'Program.cs(5,24):错误CS0234:类型或命名空间名称"Tasks"在命名空间"System"中不存在。线程化(您是否缺少程序集引用?)

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

当我这样做的时候:

C: ' Windows ' Microsoft.NET ' Framework ' v3.5 ' csc.exe C: '目录…' Program.cs

CSCD777AE6152014D6AAEC769E73B879B29.TMP: error CS1567: error generated Win32 resource: Access is denied。无法删除用于默认Win32资源的临时文件"c:'Windows'Microsoft.NET'Framework'v4.0.30319'CSCD777AE6152014D6AAEC769E73B879B29.TMP"——系统无法找到指定的文件。

您可能希望位于文件Program.cs的目录中。这样,您就具有对文件夹的写权限,以生成必要的输出文件。您还可以使用/out选项来指定输出文件名

有谁能帮助我理解为什么这一切都工作良好的开发人员命令提示符,但失败的常规命令提示符,即使完全量化路径为" css .exe"?

很可能是因为PATH环境变量不同。Visual Studio命令提示符,在启动命令提示符后设置一堆环境变量。通过在两个终端上运行set命令并对它们的输出进行比较,您可以看到两个提示符在环境中的差异。不用说,某些环境变量总是不同的,这不是由于VS.NET

正如@KeithNicholas在评论中提到的,你可以简单地调用C:'Program Files (x86)'Microsoft Visual Studio *'Common7'Tools'VsDevCmd.bat来设置你的常规命令提示符,比如visual studio命令提示符