Unity -VS - DLL 编辑后期生成事件

时间:2022-10-02 12:52:08

问题描述: 我有一个解决方案A_Project,还有另一个解决方案B_Project需要用到A的最新DLL,如果每次修改A_Project,然后复制最新的DLL到B_Project 很麻烦。
解决方法:使用生成事件。copy[源文件全路径] 拷贝到的路径

宏:
(TargetPath): (ProjectDir) : 项目的目录(定义为驱动器 + 路径);包括尾部的反斜杠“\”。
(TragetDir):+ (TargetFileName): 生成的主输出文件的文件名(定义为基本名称 + 文件扩展名)。
具体可以看MSDN定义,或者直接看“宏”的值
Unity -VS - DLL 编辑后期生成事件
现在做一个例子:
Unity新建一个A_Project项目,用VS创建一个B_Project类库-项目(也可以是另一个Unity项目)。为了使路径简单,方便解释 ,把B_Project创建在A_Project同级目录下。
Unity -VS - DLL 编辑后期生成事件
提示: B_Project是为Unity生成类库肯定用到Unity类库,所有要添加UnityEngine等相关引用。笔者当前的Unity5.33只支持.net3.5以下,所有B_Project要修改为3.5以或以下。
Unity -VS - DLL 编辑后期生成事件
对于B_Project就只在Start()方法打印数据,最后点击生成解决方案,在Debug下生成DLL,接下来我们引用改DLL。

打开Unity项目A_Project项目,打开Asset->Open C# Project打开VS。 选中 解决方案->添加->现有项目。选中B_Project下的B_Project.csproj文件,这样A下我们可以编辑B的类库了

如果A中有代码,我们会看到这样的。第一个A_ProjectCsharp是Unity自动生成的管理Unity项目下的所有代码。
Unity -VS - DLL 编辑后期生成事件

我们对B_Project添加生成事件命令,操作如下:
选中B_Project,属性->生成事件->编辑后期生成事件。可以观察下宏的定义。然后写参数,选中宏,然后点插入即可

对于A、B项目的事件代码的写法就不说明了,根据A、B的目录结构,对了,最好在A_ProjectUnity项目下新建一个Plugin文件夹,专门放DLL等文件。

原理:
1 . copy[源DLL等文件路径] [拷贝到需要DLL的路径位置] 目的是为了A使用B提供的DLL
2 . 同时需要把B_Project下生成的B_Project.dll.pdb转换为B_Project.dll.pdb.然后放到A_Project的Plugins下,这是为了能在编辑B项目类库的时候发生错误时,显示DLL报错行数。
3 . 第二步需要找到Unity下的pdb2mdb.exe和dll放到A_Project下,与Assets同级。。新建一个文件夹命名为pdb2mdb
所有路径写法如下:
这里美元“$”打不出来,看截图吧。。

copy (TargetPath) (SolutionDir)Assets\Plugins$(TargetFileName) 把B生成的DLL拷贝到A中

(SolutionDir)pdb2mdb\pdb2mdb.exe (TargetPath) 利用unity自带的pdb2mdb.exe 将B生成的dll 自动生成 dll.mdb

copy (TargetDir) (TargetFileName).mdb $(SolutionDir)Assets\Plugins\$(TargetFileName).mdb 将第二步骤在B下生成的dll.pdm复制到A Plugin下dll.mdb

Unity -VS - DLL 编辑后期生成事件

这样 就能使用DLL并显示行数了

Unity -VS - DLL 编辑后期生成事件

说明:这种管理方式一般是公司为了防止代码泄露,并且管理方便所用的方式。整个项目你只会看到DLL,代码编译后就生成DLL。

前方高能:来一发广告-广告