在 Unity 中,是给 C# 脚本引用 dll 或者安装 NuGet 包,而不能给 C# 项目做 dll 引用。
Unity 中引用 dll 有两种官方途径:

  1. Assets\csc.rsp 文件,用于指定引用 .NET 运行时的 dll
  2. Assets\Plugins 文件夹,用于指定引用单独的 dll 文件

当然,这两个能否正常使用,以及扔到 Plugins 文件夹中的 dll 应该是什么平台,取决于 Unity 项目的配置。

每次点击 Open C# Project 打开 C# 项目时,都会重新生成 sln 和 csproj 文件,所以实际上你对 sln 和 csproj 所做的任何改动都是无效的!

这样的设计,有好处也有坏处:

  1. 有了 sln 和 csproj,Visual Studio 将能充分运行代码分析器,可以在类与其他符号之间跳转,可以有智能感知提示,可以实时发现编写中的代码错误(甚至是引用错误)。
  2. 但让 Visual Studio 的各种功能激活后就会让我们这样的入门开发者产生误会,认为这其实就是 C# 项目,会尝试真的对这些项目进行可能超出 Unity 功能范围的修改。

真正在编译完成放到游戏中运行的,是 Assets 文件夹中的文件。而外面的 sln 和 csproj 文件,应该加入到 .gitignore 文件中,从版本管理中忽略掉。

mcs.rsp

引用其他类库程序集
如果你的 API 兼容性级别是 .NET Standard 2.0,那么你不应该使用此 mcs.rsp 文件。因为当你选择 .NET Standard 2.0 的 API 级别后,.NET Standard 2.0 中的所有依赖就全部引入了,如果还缺,那也不会在 .NET Standard 2.0 里面,你应该考虑后面“Plugins”的引用方式。
接下来,我们说说当你使用 .NET 4.x 的 API 级别时,应该如何使用 mcs.rsp 来引用 dll。

向 Unity 项目的 Assets 文件夹新建一个 mcs.rsp 文件,里面添加以下内容:

-r:System.Net.Http.dll
这表示此 Unity 项目中的 C# 脚本引用 .NET Framework 中的 System.Net.Http 程序集。之后,你就能使用诸如 HttpClient 这些类型。
你也可以使用同样的方式引用其他的 dll,每行一个。
默认情况下,Unity 会帮我们引用这些 .NET 4.x 的程序集:

  • mscorlib.dll
  • System.dll
  • System.Core.dll
  • System.Runtime.Serialization.dll
  • System.Xml.dll
  • System.Xml.Linq.dll

因此,你不需要手工将它们加入到 mcs.rsp 文件中

切换配置文件

使用 mcs.rsp 文件来引用类库程序集时,务必谨慎。如果将 API 兼容性级别从 .NET 4.x 更改为 .NET Standard 2.0,而 Project 中存在类似于以上示例的 mcs.rsp,则 C# 编译会失败。System.Net.Http.dll 程序集并未存在于 .NET Standard 2.0 配置文件中,因此 C# 编译器无法找到该程序集。
mcs.rsp 文件可能具有特定于当前 .NET 配置文件的部分。如果更改此配置文件,则需要修改 mcs.rsp 文件。

Plugins

对于 .NET 4.x 或者 .NET Standard 2.0 中不带的类型,那么你应该使用 Plugins 文件夹来解决。
在 Assets 文件夹中新建 Plugins 文件夹,然后将你希望引用的 dll 丢进去就完成了。

引用 dll

因此,如果你已经拥有了 dll 了,那么直接往 Plugins 文件夹扔就好了。但是你需要注意,扔进去的 dll 需要兼容目标运行时(如 Mono 虚拟机)以及目标平台(例如 iOS)。