在 SublimeText 搭建 C# 环境可以找到的博客基本都是使用 csc 进行构建,而我期望在 dotnet 下编译整个项目。通过 dotnet 编译整个项目可以解决编译大项目时需要打开一个控制台降低效率

用 dotnet 编译的优点是我可以在 Ubuntu 系统使用 SublimeText 编写和编译 C# 项目。我最近无聊弄了一个 Ubuntu 系统在玩,在 Ubuntu 系统下确实需要缺啥写啥,如果不是要玩,还是推荐不要用这个系统。因为我还不熟悉这个系统,用的效率特别低。例如我想写一个 C# 程序,我想要在 SublimeText 通过 ​​ctrl+B​​ 进行编译然后运行,而原本在 Windows 下我可以同步我的配置,在这里就不能使用,原因是在 Windows 下通过 csc 编译文件

而通过 dotnet 的编译,可以利用跨平台的 dotnet 技术,在 Ubuntu 下也使用相同的程序和快捷键开发

在使用之前,请先安装好 dotnet 程序,安装方法请看 https://dotnet.microsoft.com/ 在安装之后请测试在控制台输入下面命令




dotnet --info



我需要在 cs 文件所在的文件夹,或上一级等寻找 csproj 文件,然后通过 ​​dotnet run --project xx.csproj​​ 的方法运行项目。而通过输入的 cs 文件寻找 csproj 文件需要写一点额外的程序,这个程序非常简单,可是我是在 ubuntu 写的,我才不会告诉你我砸了一个键盘了

我将从输入 cs 文件,找到 csproj 文件,然后调用 dotnet run 的代码放在 gitee 欢迎小伙伴下载

将 SublimeTextBuildDotNetFile​ 项目下载在本地,通过 cd​ 进入到下载所在的文件夹,也就是 SublimeTextBuildDotNetFile.csproj 所在的文件夹,通过 dotnet build 命令编译

可以在 bin\Debug\netcoreapp3.1 里面找到 SublimeTextBuildDotNetFile 文件,这是一个可运行的程序

在 SublimeText 可以通过 Build System 新建构建程序,其实这里的构建程序就是通过命令行调用现有程序,在现有程序传入当前文件的参数,接下来的就是调用的进程拿到当前文件做的,这样就能做到,只要有编译器,几乎可以构建任意的文件

在 SublimeText 的 Tools 的 Build System 点击新建 Build System 在打开的页面输入下面代码




{
"shell_cmd": "~/lindexi/SublimeTextBuildDotNetFile/bin/Debug/netcoreapp3.1/SublimeTextBuildDotNetFile $file",
"file_regex": "^(...*?):([0-9]*):?([0-9]*)",
"working_dir": "${file_path}"
}



有搜 将Sublime Text配置为C#代码编辑器的小伙伴会发现和其他小伙伴不同的是我将 ​​shell_cmd​​ 修改为自己写的程序

将上面的文件保存,点击保存会自动保存到 SublimeText 配置文件夹,在 ubuntu 的文件夹是 ​​~/.config/sublime-text-3/Packages/Users​​​ 保存的文件是 ​​csharp.sublime-build​​​ 此时打开一个 cs 文件,按下 ​​ctrl+B​​​ 就会自动找到 csproj 文件,然后运行 ​​dotnet run --project xx.csproj​​ 命令

下面是 SublimeTextBuildDotNetFile 的 Program 代码,可以看到代码十分简单

using System;
using System.IO;
using System.Diagnostics;

namespace SublimeTextBuildDotNetFile
{
class Program
{
static void Main(string[] args)
{
if(args.Length>0)
{
var file = args[args.Length-1];
var folder = Path.GetDirectoryName(file);

var csprojFile=FindCsprojFile(folder);

if(string.IsNullOrEmpty(csprojFile))
{

}
else
{
Run(csprojFile);
}
}
else
{
Console.WriteLine("You should input file");
}
}

static void Run(string csproj)
{
csproj = $"\"{csproj}\"";
var str = $"run --project {csproj}";
Process.Start("dotnet",str);
}

static string FindCsprojFile(string folder)
{
if(string.IsNullOrEmpty(folder))
{
return null;
}

var fileList = Directory.GetFiles(folder,"*.csproj");

if(fileList.Length >= 1)
{
return fileList[0];
}
else if(fileList.Length ==0)
{
return FindCsprojFile(Directory.GetParent(folder).FullName);
}

return null;
}
}
}

上面的代码没更新,最新代码请看 gitee 如果使用遇到问题欢迎小伙伴评论


我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。

如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙,不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。