dll,动态链接库。C++和C#都能打包dll。C++里面是二进制,C#里面是中间语言IL。本质是两种文件,碰巧用一样的后缀。C# dll还有专用名称,叫程序集Assembly。

程序集可以调用,可以反编译查看,不能修改,不能直接运行。

VS打包dll时它依赖的dll会全部一起拷贝到目标文件夹。

大型Unity项目通常会划分多dll。

Unity划分多dll开发一种方式是创建asmdef,把属于此程序集的脚本放在里面及其子文件夹。

另一种是脱离Unity,纯VS开发,依赖的Unity程序集全部拷贝到csproj里,或者直接引用Unity编辑器里的也行。

Unity导入dll相关

我们知道C++和C#编译的库都叫dll。在Unity里C# dll的type显示为Managed,C++的dll显示为Native。C# dll有的可以展开看见里面的类。

dll能展开的条件:

  1. 是C# dll;
  2. 勾选Auto Reference;
  3. 里面有继承MonoBehavior的类。只会显示这些类。

[反编译]和[从元数据]

反编译有完整源码。从元数据只有方法签名。

在这设置

无VS查看程序集的版本

在文件夹shift>Powershell

(Get-Item "xxx.dll").VersionInfo

有两种版本。C#程序引用里显示的是产品版本。

未能加载文件或程序集XXX或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。

依赖者需要的程序集版本和项目引用/依赖项里的程序集版本不匹配。

在WebConfig的runtime-assemblyBinding加类似配置,指定bindingRedirect 。

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Http.WebHost" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
      <bindingRedirect oldVersion="0.0.0.0-5.2.9.0" newVersion="5.2.9.0"/>
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
      <bindingRedirect oldVersion="0.0.0.0-5.2.9.0" newVersion="5.2.9.0"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>

更多推荐