C# dll笔记
·
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能展开的条件:
- 是C# dll;
- 勾选Auto Reference;
- 里面有继承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>
更多推荐
所有评论(0)