Error: A portable PDB can't be converted to mdb.

Unity中使用外部C# DLL的方法 在Unity项目中,我们需要创建一个C#脚本来调用外部DLL中的功能。在Unity编辑器中,右键点击项目面板中的任意位置,选择"Create" -> “C# Script"来创建一个新的脚本。这个DLL文件可以是自己编写的,也可以是第三方库提供的。需要注意的是,为了正确引用和使用外部DLL,你需要确保DLL文件的名称、路径和函数的声明都是正确的。在Unity编辑器中,创建一个空的游戏对象,然后将刚刚编写的脚本拖放到该游戏对象上。方法中,我们调用了外部DLL中的函数,并将返回值打印到Unity的控制台中。 阅读详情

目标实现

Windows 平台

工具

步骤

  • 创建 C# 类库工程

  • 引用 UnityEngine.dll 等其他库

  • 添加【成功生成时】的【后期生成事件命令行】
    $(SolutionDir)Build/.Project$(ProjectName).py $(ConfigurationName) $(TargetDir) $(TargetName) $(ProjectDir)$(IntermediateOutputPath)

  • 编写 Python 脚本,以便编译完毕,可以自动拷贝 DLL 等文件到 Unity 工程

注意脚本里面要包含 pdb2mdb,例如:

[python]  view plain  copy
  1. if isWin:  
  2.     p = subprocess.Popen([currentPath + "/pdb2mdb", targetName + ".dll"], shell = True, cwd = targetPath)  
  3.     p.wait()  
  4.   
  5.     shutil.copy(targetPath + targetName + ".dll.mdb", resPath + targetName + ".dll.mdb")  

另外,需要用 precompile.exe 来对 protobuf 的数据 dll 文件进行序列化和反序列化,如下:

[python]  view plain  copy
  1. if isWin:  
  2.     p = subprocess.Popen([currentPath + "/precompile", targetName + ".dll", "-o:" + targetName + ".AOT.dll", "-t:AOTDataConfig" ], shell = True, cwd = targetPath)  

调试

在确定 DLL 对应的 mdb 文件有拷贝到 Unity 工程,就可以直接通过【附加 Unity 调试程序】来进行调试

Mac 平台

工具

  • Visual Studio for Mac 7.3.3

  • Unity 5.6

步骤

  • 将 Windows 平台所创建工程拷贝到 Mac 下

  • 准备修改 .csproj 文件 和 Python 脚本

因为安装 Visual Studio for Mac 时已经附带安装了 Mono.framework,所以不再需要额外安装 mono,自带的版本号为 5.4.1.7,如下所示:

编译工程,发现生成了 DLL 和其对应的 pdb 文件,使用命令:

/Library/Frameworks/Mono.framework/Versions/Current/bin/mono pdb2mdb.exe test.dll

提示不能进行转换,如下所示:

Error: A portable PDB can't be converted to mdb.

查阅官网(http://www.mono-project.com/docs/about-mono/releases/5.0.0/ ),提到已经使用【csc.exe】代替【mcs.exe】来进行编译了:

Replacing mcs with csc in user scripts should be straightforward but small issues can arise as command line arguments accepted by csc and features are not identical to mcs. For example, csc generates Portable PDB (.pdb) debug files instead of Mono’s MDB (.mdb) format.

而 Portable 版本的 pdb 文件是无法转换成 mdb 文件,那么就将编译方式改成【mcs.exe】,因为 Unity 也是用这种方式来编译的,编辑器方法 EditorUtility.CompileCSharp 调用如下:

更改每个 .csproj 工程配置文件,在里面添加如下属性:

[xml]  view plain  copy
  1. <PropertyGroup Condition=" '$(OS)' == 'Unix' ">  
  2.   <CscToolExe>mcs.exe</CscToolExe>  
  3. </PropertyGroup>  

表示在非 Windows 平台下使用【mcs.exe】进行编译。再次编译工程,可以发现在中间目录 obj\Debug 目录下生成了对应的 mdb 文件,那么修改 Python 脚本,来将这个 mdb 文件也拷贝到 Unity 工程下:

[python]  view plain  copy
  1. if isWin:  
  2.     p = subprocess.Popen([currentPath + "/pdb2mdb", targetName + ".dll"], shell = True, cwd = targetPath)  
  3.     p.wait()  
  4.   
  5.     shutil.copy(targetPath + targetName + ".dll.mdb", resPath + targetName + ".dll.mdb")  
  6. else:  
  7.     shutil.copy(mdbPath + targetName + ".dll.mdb", resPath + targetName + ".dll.mdb")  

另外,precompile.exe 的调用也需要更改,如下:

[python]  view plain  copy
  1. if isWin:  
  2.     p = subprocess.Popen([currentPath + "/precompile", targetName + ".dll", "-o:" + targetName + ".AOT.dll", "-t:AOTDataConfig" ], shell = True, cwd = targetPath)  
  3. else:  
  4.     p = subprocess.Popen(["/Library/Frameworks/Mono.framework/Versions/Current/bin/mono", currentPath + "/precompile.exe", targetName + ".dll", "-o:" + targetName + ".AOT.dll", "-t:AOTDataConfig" ], shell = False, cwd = targetPath)  

调试

在确定 DLL 对应的 mdb 文件有拷贝到 Unity 工程,就可以直接通过【Run】→【Attach to Process...】来进行调试:

​

可以看到已经进行挂载调试了。


数据中心机房建设标准及依据 深刻理解、尊重并恪守这些依据,是我们以科学、经济、可靠的方式,为蓬勃发展的数字经济筑牢基石的唯一路径。让我们共同努力,以标准为依据,以匠心为精神,建造更多世界一流的高效能、高可用、高智能的绿色数据中心,共同赋能数字中国的宏伟事业,支撑中华民族在数字时代的伟大复兴征程中稳步前行!今天我将力图以宏大的视角和深入的剖析,系统性地阐述数据中心机房建设所应遵循的多层次、多维度的标准依据,揭示这些依据背后的深层逻辑与时代使命,并探讨其如何共同作用于一座世界级数据中心的诞生。,以支持万兆乃至更高速率的传输。 阅读详情

相关推荐

手把手教你用Verilog实现AT24C64的I2C读写(附完整仿真流程)

本文详细介绍了如何使用Verilog HDL设计AT24C64 EEPROM的I2C控制器,并配合ModelSim完成完整的仿真验证流程。内容涵盖I2C协议解析、Verilog状态机设计、AT24C64读写操作实现,以及仿真波形分析和调试技巧,为FPGA开发者提供了一套完整的EEPROM控制解决方案。

3c4x5z6v7b的博客 844

Unity Windows&Mac 编译和调试外部C#动态库(DLL)

目标实现 外部 DLL 工程:https://docs.unity3d.com/Manual/UsingDLL.html 集成 protobuf-net :https://github.com/mgravell/protobuf-net

无幻 3903

STM32通过ESP8266连接机智云APP(第二讲,烧录固件并测试)

今天与大家分享STM32通过ESP8266连接机智云APP,并完成数据的上传下发第二讲。带大家一起烧录机智云固件到ESP8266并且将其通过机智云串口助手与APP进行测试。

qq_63267523的博客 1425

Unity 使用 Unity 直接编译外部 DLL

Unity 集成了 Mono 编译器,所以在 Unity 里面新建 C# 脚本的时候,会自动进行编译。那么,思考可以不可以借助 Unity 的编译接口,来编译外部 DLL 文件。查找 Unity 编辑器的接口,发现有个 API

无幻 5640

Java开发者必看:WPS Office在线预览接入实战(含回调配置避坑指南)

本文为Java开发者提供了WPS Office在线预览功能的完整接入实战指南。详细解析了从服务申请、生成带签名的访问URL,到实现核心回调接口(文件信息、用户信息、文件保存)的全流程,并重点分享了签名算法与回调配置中的关键避坑点,帮助开发者高效集成,提升Web应用文档处理体验。

vodka的博客 1328

深入解析SOC芯片设计中DFT OCC与ATPG的协同优化策略

本文深入探讨了在复杂SOC芯片设计中,DFT(可测试性设计)的核心组件OCC(片上时钟控制器)与ATPG(自动测试向量生成)的协同优化策略。文章从基本原理出发,分析了OCC作为测试时钟管理者的关键作用,以及ATPG作为故障检测引擎的工作机制,并重点阐述了二者在测试架构选择、参数对齐、低功耗测试等场景下的协同方法与实战技巧,旨在实现更高的测试覆盖率与更低的测试成本。

efc123456的博客 1034

使用Rider C# Dll工程和Unity工程互相调用、断点方法

创建C# Dll工程,生成C#工程Dll创建Unity工程Unity调用C#工程的代码C#工程调用Unity工程的代码断点方法。

TDC的专栏 1794

使用R语言绘制Logistic回归模型的亚组分析森林图

亚组分析是一种常用的统计方法,用于探索不同亚组之间的差异,并确定是否存在某些变量对结果的调节作用。在本文中,我们将使用R语言来绘制Logistic回归模型的亚组分析森林图。在该图中,每个亚组都用一个点表示,点的位置表示亚组的均值,而线段表示亚组的置信区间。垂直参考线用于表示效应值为0的点,帮助我们判断亚组之间的差异。希望本文对你有所帮助,让你能够使用R语言绘制Logistic回归模型的亚组分析森林图。是一个二分类的变量,我们希望在亚组分析中探索它与响应变量之间的关系。函数来计算每个亚组的均值,并使用。

PixelNinja的博客 2002

unity调用自开发的dll调试功能方法

方法分为两步: 第一步:下载pdb2mdb.exe 用于生成mdb。 pdb2mdb.exe下载链接:https://pan.baidu.com/s/1xrSSjzNvLgkzi4-RbnuBYQ 密码:dlgk   unity工程下创建pdb2mdb文件夹,与Assets文件夹同级,放入pdb2mdb.exe。   第二步:在vs工程,点击属性-&gt;生成事件-&gt;后期生成事件...

zxtech_lxy的专栏 1426

功能安全Safety Case构建方法论

本文系统阐述了功能安全认证中SafetyCase的构建方法。SafetyCase是一套结构化论证体系,通过Claim-Argument-Evidence(CAE)逻辑链证明系统安全性,包含系统级、技术安全级和实现级三层论证。文章详细介绍了SafetyCase的核心框架、与FMEDA等验证方法的关系、工程化实施步骤,以及常见失效模式。特别强调SafetyCase连接理论、实现与证据的桥梁作用,是功能安全认证的灵魂文件,要求将分散的安全活动组织成完整的逻辑论证。

VehSwHwDeveloper的博客 577

NLP高频面试题(一)——Transformer的基本结构、作用和代码实现

本文详细介绍了Transformer模型的基本结构和PyTorch代码实现过程。首先解析了Transformer的核心组成部分,包括嵌入层、多头自注意力机制、位置编码、前馈神经网络、编码器和解码器等模块,并通过清晰的代码示例逐步展示了如何在PyTorch中构建完整的Transformer模型。文末提供了一个可运行的简单示例,帮助读者快速理解并实践Transformer的核心原理与实现方法。

WeLearnNLP 1026

Unity调试外部DLL

1、更改DLL的.csproj工程配置文件,在里面添加如下属性:<PropertyGroup Condition=" '$(OS)' == 'Unix' "> <CscToolExe>mcs.exe</CscToolExe> </PropertyGroup> 2、用Debug模式编译DLL。会生成.dll和.dll.md...

weixin_30920597的博客 618

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

VS调试dll(在Unity环境下)

1.在VS环境下设置dll工程的调试信息为【仅PDB】 2.将dll和pdb复制到Unity工程的Plugins目录下,Unity将自动生成一个mdb文件 如EnjoyPlanet.dll、EnjoyPlanet.pdb、EnjoyPlanet.dll.mdb(此文件为自动生成,如果没有生成该文件将无法调试) 3.切换到VS,【调试】【附加Unity调试】选择Unity工程,即可开始调试 ...

zouxin_88的专栏 1975

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

unity出pc的包,然后想调试C#的dll咋办

这两个要勾选上:Development Build和Script Debugging两个选项。这里拷贝的是两个文件:CSharpDll.dll和CSharpDll.pdb。这里没有走额外的操作,没有生成mdb文件,也可调试。

小孔明的专栏 2002

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

关于新版Unity导入dll并添加pdb文件的问题

导入自定义dll有时会出现如下的错误信息 Unity is only able to load mdb or portable-pdb symbols. Assets/Plugins/CqPlugin/CqCore.pdb is using a legacy pdb format. 这是因为生成的调试信息文件pdb的格式问题. 如果是自己的c#库可以在生成选项中的高级生成设置中的调试信息项切换到可移植. ...

cqqqq的专栏 2439

在Unity中调试dll

在Unity中调试dll 项目中用到一个dll,想进入这个dll调试其中的代码,如何做呢? 1.使用ilspy反编译该dll 2.反编译成功后,选择菜单file->save code保存c#代码(包含一个csproj) 3.用visual studio打开2中得到的csproj文件,会打开visual studio工程。 4.反编译得到的代码可能会有一些语法错误,比如反编译会把属

sunny__chen的博客 2955

Unity3D研究院编辑器之Mac编译调试外部引用DLL(三十二)

最近在MAC下需要频繁构建DLL,并且还需要调试,写篇文章记录一下过程,如图所示,先创建一个Library工程。 右键EditReference把UnityEngine.DLL引入进来,并且取消选择Local Copy。不然后面会把UnityEngine.dll也拷贝都目标目录下。 设置.NET版本 设置DLL编译后输出目录,这里让直接输出到unity工程下的Assets目录下 编译后dll mdb pdb文件都会放到unity中,注意如果是构建release版本...

翻肚鱼儿的博客 566

VS2022 - 制作自己的C#类库dll,并输出Unity识别的pdb调试信息文件

这样设置后,把dll和pdb文件放入到Unity中同文件夹下,就可以在Unity中断点调试dll中的代码了。*** 输出unity可以识别的pdb调试信息文件 ***右键项目-属性-生成-高级-调试信息:可移植(P。然后编写库代码,设置dll生成目录。MDB和Portable PDB文件。这是因为Unity只能识别。

枫叶的博客 1067

Mac 运行Unity “DllNotFoundException: AppleEventIntegration” 错误解决。

Unity “DllNotFoundException: AppleEventIntegration Microsoft.Unity.VisualStudio.Editor.VisualStudioEditor.OpenOSXApp” 错误解决。 找到AppleEventIntegration.bundle 文件所在的目录。 在Mac terminal 中 执行以下命令xattr -d com.apple.quarantine /Users/.../AppleEventIntegration.bun..

kaixinjiaoluo的博客 3778

调试外部DLL时,常见的错误

调试外部DLL时,常见的错误

浅尝辄止的博客 1662

unity pdb2mdb.exe 使用方法

1.c#编译出的工程调试信息是pdb文件,而mono调试使用的是mdb文件,需要使用unity自带的pdb2mdb.exe转换 2.命令行生成xxx.mdb(your.dll必须和pdb在同一目录): "C:\Program Files (x86)\Unity\Editor\Data\MonoBleedingEdge\bin\mono.exe" "C:\Program Files (x86)\...

linuxheik的专栏 4448

Unity技术分享之Mac环境下使用VS/MonoDeveloper制作动态链接库(Dll)

众所周知,动态链接库(Dynamic Link Library简称dll)当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。--------百度百科.

月儿圆 1595

新手向 Unity导入dll 的一些问题

加载dll 报错? 基本问题讲解

PcmXhy的博客 1976

Unity中使用和调试Dll

原文地址:http://jacksondunstan.com/articles/3052?utm_source=tuicool 正文: 本文意在指导你在Unity中创建、使用和调试一个.NET dll。你可以模块化你的代码,把它们组织成库,这样开发者只要导入一个单独的文件就可以使用你的库。从代码设计的角度上讲,这在组织你的纯代码时尤其有用,比如你可以把mono形式的结构拆成可复用的组件。 首

…… 1万+

unity如何调试dll库文件

首先,调试这个dll文件,必须在本地有工程~ 并且安装visual studio tools for unity~这是前提。 我是在visual studio 2015中进行调试的。 然后打开unity中需要调试的脚本文件,在解决方案中添加外部工程,也就是你要进行调试的工程。 添加进来后,鼠标右键该工程,选择属性,其中有个输出目录~如下图所示: 这个输出目录就是你在unit

proglover66的专栏 2407

在Unity中引用Dll的两种方法

Unity3D 能够很方便的集成一些外部插件,以便调用现有的动态链接库。下面会介绍Unity中如何集成Dll的两种方法。 1.   标准引用 这里所使用的语言是C#。 1.1   新建C#类库项目,这里就不多介绍了。 1.2   项目建好后正常的编写代码。 以上是一个简单的测试代码。 1.3   将项目属性 -> 应用程序 -> 目标框架:改为 .N

宁静致远 3万+
上一篇: 编译Mono ./include/private/gcconfig.h:1334:34: 错误:‘GC_DATASTART
下一篇: PhysX3 User Guide 02 - Shapes
linuxheik
博客等级 码龄15年 865粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值