关于c#的第三方库

Posted by Daryl on May 15, 2019

因为实验室大师兄要毕业了,有个用c#写的项目需要我接手。于是花了点时间把c#的各种东西都尝了个鲜。本文大致说说我的感受和理解。

c#的框架有.dot framework和.dot core,两个是(大概)是不一样的平台,可以理解成python2和python3的感觉。某些第三方库在两者上可能不通用。

c#程序无论是编译成可执行文件还是库文件都是dll的扩展名。如果要运行可执行文件,直接用dotnet跑就行了,(应该)不用转到exe再跑。可以认为dotnet=python,编译得到的dll文件是.py脚本文件。

c#使用第三方库十分麻烦(当然是比起pyhton)。首先有一个nuget工具,可以类比python的pip。要用什么库,先用nuget装。然后需要在项目的.csproj文件中导入这个库,比如你要用JiebaNet.Segmenter就得在那里面写上:

<ItemGroup>
    <PackageReference Include="JiebaNet.Segmenter" Version="1.0.6" />
</ItemGroup>

这样的内容。这种情况下用ide就特别方便。我尝试使用了iTextSharp库,这是一个操作pdf文件的库,直接用以上步骤就可以了。

但是对于上面提到的JiebaNet库,这样还不够,原因是Jieba库有词典文件(txt格式)和其他信息(json格式),放在库中。只用上面的语句,(应该是)只把库的dll文件导入到了工程中,而其他资源文件,则都排除在工程外,因此在执行的时候,会提示错误找不到相应的资源文件(仔细看错误提示的话可以看到系统提示没有~/path/to/proj/Resources/somefile.txt这个文件)。这个时候最好的解决办法就是找到相应的库的目录,一般是~/.nuget,去里面找找就能找到相应的库。把库的Resources文件夹以及所有文件都拷贝到工程的根目录下Resources文件夹,就可以解决问题了。

所以用一个库的过程大概是:nuget安装->project里导入->(有些库需要额外地自己拷贝文件->)在代码里using相应的namespace->用。比起python的pip和import两步走还是太麻烦了哈哈哈哈。【x

关于ide

这个我尝试了vs和jetbrains的rider。感受就是,不知道vs好用的地方在哪。vs最让我舒服的地方就是自动格式化(自动加空格),其他的自动补全之类的感觉都不是很符合我的习惯= =。用rider的感觉就是woc,这个补全太智能了吧。另外vs作为亲儿子,支持的东西还是挺多的,比如gui开发,这个rider似乎就不行。另外感觉vs的搜索非常不符合我的习惯(我的习惯是ctrl+f当前文件搜索,ctrl+shift+f全项目搜索),还有很多win的快捷键键位一下子也难以适应。rider的nuget位置很好找,就在窗口左下角,vs还得从菜单里点。

另外vscode里那个c#的插件感觉莫名其妙的,很不好用,而且莫名其妙会给代码加上一坨红线error,个人感觉体验不好,卸载了。【但是vscode的搜索是最符合我习惯的x

大概就这些吧,感觉c#写代码的体验还是不错的,反正应该比Java好多了【x