C# 构建系统,将项目目录中的每个*.CS文件编译为一个可执行文件
我开始使用Sublime Text(通过Dropbox在Linux和Windows中同步软件包文件夹),我正在创建一些没有Visual Studio的小型C#项目 我可以用windows中的C# 构建系统,将项目目录中的每个*.CS文件编译为一个可执行文件,c#,build,sublimetext3,C#,Build,Sublimetext3,我开始使用Sublime Text(通过Dropbox在Linux和Windows中同步软件包文件夹),我正在创建一些没有Visual Studio的小型C#项目 我可以用windows中的csc或linux中的gmcs编译单个文件,并且已经用gmsc*.cs从命令行(sublime外部)在linux中编译了多个文件,它巧妙地解决了依赖关系,并创建了一个以源代码中“最顶层”类命名的可执行文件 在对Sublime Text build配置文件进行了一些摸索之后,我的问题是: 我应该如何配置升华文本
csc
或linux中的gmcs
编译单个文件,并且已经用gmsc*.cs
从命令行(sublime外部)在linux中编译了多个文件,它巧妙地解决了依赖关系,并创建了一个以源代码中“最顶层”类命名的可执行文件
在对Sublime Text build配置文件进行了一些摸索之后,我的问题是:
我应该如何配置升华文本(通过JSON文件)以将项目/目录中的每个*.cs文件构建到单个可执行文件中
<>这些项目,至少现在是很简单的,我只是把文件分开来保持事情的组织性。虽然它是针对ST2发布的,但我发现它在ST3中也可以正常工作
我认为,在阅读构建系统文档后,您会发现海报的具体方法比试图从头开始找到解决方案更容易遵循和适应
以下是.sublime build
文件的内容-使用1)为我的Windows环境设置的cmd
路径和2)$file
替换为*.cs
以编译当前文件目录中的所有.cs
文件:
{
"cmd": ["C:\\Bin\\Scripts\\sublimetext_csharp_builder.bat", "*.cs", "${file/\\.cs/\\.exe/}"], // NOTE: path set for my Windows environment
//"cmd": ["\\path\\to\\sublimetext_csharp_builder.bat", "$file", "${file/\\.cs/\\.exe/}"],
"working_dir": "${project_path:${folder:${file_path}}}",
"file_regex": "^(...*?)[(]([0-9]*),([0-9]*)[)]",
"selector": "source.cs"
}
你可以找到。下面我刚刚1)删除了它对Visual Studio批处理文件的依赖,以设置环境变量,只要csc
在%PATH%
中解析,或者使用它的完整路径,并且2)引用了它到结果exe的路径,就不需要设置环境变量,我发现我正在使用的路径需要它(因为它包含空格):
您的问题是如何通过一次调用CSC或其他方式编译多个CS文件(“CSC/?”应该有助于前者-只需指定所有文件)…@AlexeiLevenkov是的,我想执行与gmcs*.CS相同的操作;mono*.exe
,它在bash脚本中成功运行,但我不想运行脚本,而是想将其放入.build system
文件中,它应该是这样的(但我不知道如何)。我明白了-你的问题是关于一些我不知道的事情,所以我不理解它的原因。抱歉。@heltonbiker:另外,金伟杰的a和B对这种方法做了一些详细的阐述——一旦你得到了满足你需要的上述简单方法,也许也值得一试。
:: Assumptions:
:: - Sublime Text has set the working directory and both the source and executable files
:: are in that directory
:: - The script is only capable of handling simple C# apps that do not reference 3rd-party
:: libraries
:: Inputs from Sublime Text
:: %1 - The full path and filename of the source file to build
:: %2 - The name of the executable file
@SET SRC_FILE="%1"
@SET EXE_NAME="%2"
csc %SRC_FILE% /nologo /debug:full /platform:x86
@IF errorlevel 1 GOTO end
:: Execute compiled binary if build was successful.
@ECHO.
@ECHO Executing %EXE_NAME%:
@ECHO.
:: NOTE: path quoted to accommodate spaces in it
@"%EXE_NAME%"
@%EXE_NAME%
:end