2016-10-02 101 views
-1

我有使用Visual Studio开发的这个相当简单的控制台应用程序。有了它,我已经整合了一个简单的C#程序,使用“Developer Command Prompt for VS2015”我导航到我的目录并运行“csc Program.cs”来编译“Program.exe”文件。从那里我可以输入“Program ***”并传递一个文件名,如“Program file.asm”。无法从常规命令提示符编译.cs文件,只有开发人员命令提示符?

一切都很完美。但是,我想从常规命令提示符运行此。当我为VS2015开发人员命令提示符中编译下面两行输出:

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

而且,当我浏览我可以看到,在C:\ WINDOWS \ Microsoft.NET \框架我有一个文件夹选项:

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

当我这样做:

C:\ WINDOWS \ Microsoft.NET \框架\ v3.5版本\ CSC.EXE C:\目录... \ Program.cs的

输出是:

微软(R)的Visual C#2008编译器版本3.5.30729.5420对Microsfot(R).NET Framework 3.5版 版权所有(C)微软公司。版权所有。

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

然后,我v4.0.30319尝试:

C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ CSC.EXE C:\目录... \程序.cs

输出:

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

谁能帮我明白这是为什么所有工作罚款,开发商命令提示符,但未能定期命令提示符下,即使完全量化为“CSC.EXE”的路径?

+0

你经常命令提示符下,如果你在一个正常的命令提示符和开发的命令做'set'提示,你可以看到它设置了更多的环境变量,以及路径 –

+0

你可以详细说明'set'吗?编辑:Nvm,我键入Set并立即看到。这里有一个简单的区别让我的文件在cmd提示符下运行开发人员吗? –

+0

转到命令提示符,键入set,回车......它会告诉你在环境中设置了什么。如果你想将它捕获到一个文件中,请设置> a.txt –

回答

0

我想你在尝试了很多事情,却不知道发生了什么。

我把一个简单的C#程序放在一起,使用“Developer Command Prompt for VS2015”我导航到我的目录并运行“csc Program.cs”来编译“Program.exe”文件。

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

C:\用户\目录... \的Program.cs(5,24 ):错误CS0234:类型或命名空间名称“任务”并不在同一个提示的命名空间“的System.Threading”(是否缺少程序集引用)

运行csc.exe /?存在和看到所有的选项编译器支持。其中之一是/r用于添加引用一个dll

当我这样做:

C:\ WINDOWS \ Microsoft.NET \框架\ v3.5版本\ CSC.EXE C:\目录下.. 。\ Program.cs

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

您可能想要在您的文件Program.cs的目录中。通过这种方式,您可以对文件夹写入权限以生成必要的输出文件。您也可以使用/out选项来指定输出文件名

谁能帮助我了解为什么这是开发人员命令提示符所有工作正常,但即使完全量化为“CSC路径失败定期命令提示符。可执行程序”?

很可能是因为PATH环境变量不同。 Visual Studio命令提示符在启动命令提示符后设置一堆环境变量。通过在两个终端上运行set命令并在其输出中执行diff,您可以看到两个提示之间的环境差异。毋庸置疑,某些环境变量将永远是不同的,这不是由于VS.NET

而作为@KeithNicholas在评论中提到过,你可以简单地调用C:\Program Files (x86)\Microsoft Visual Studio *\Common7\Tools\VsDevCmd.bat设置如Visual Studio命令提示符

+0

in windows'其中csc.exe'会给你执行exe的路径。 –

+0

@ScottChamberlain谢谢。不知道。我一直在unix上使用'where',但从来不知道它在Windows上工作 – Vikhram

+0

''echo%〜$ PATH:1'在一个批处理文件中将搜索路径并列出找到的第一个文件名作为唯一参数。包括全名即notepad.exe。 'batfile notepad.exe'将返回'C:\ Windows \ System32 \ notepad.exe'。 – 2016-10-03 03:03:07