如何调用NuGet包中被#if DEBUG #endif包裹的调试代码?
解决Lidgren分支中SimulatedLoss属性无法访问的问题
你遇到的问题根源很明确:这个分支里的SimulatedLoss属性被#if DEBUG/#endif条件编译指令包裹了——也就是说,只有当Lidgren库以DEBUG编译配置构建时,这个属性才会被包含在编译后的程序集中。而你当前使用的NuGet包大概率是Release版本构建的,所以自然找不到这个属性。
下面给你几个可行的解决办法:
直接拉取源代码编译DEBUG版本
这是最直接的方案:- 把该分支的代码克隆到本地
- 打开Lidgren.Network项目,在Visual Studio顶部的编译配置下拉菜单中选择
Debug - 生成项目,得到编译后的
Lidgren.Network.dll - 在你的项目中移除NuGet包引用,改为引用这个DEBUG版本的DLL
这样一来,所有DEBUG条件编译的代码都会被包含,SimulatedLoss属性就能正常设置了。
修改源代码移除条件编译(按需选择)
如果你需要在Release环境下也使用丢包模拟功能,可以修改NetPeerConfiguration.cs文件,把包裹SimulatedLoss相关代码的#if DEBUG和#endif指令删掉,然后重新编译项目。
不过要注意:这个功能设计初衷是用于调试,在Release环境启用可能会带来不必要的性能开销,建议只在测试场景下这么做。关于你尝试的调试选项
你在工具里调整的调试选项是针对你自己项目的调试设置,而SimulatedLoss的可见性是由Lidgren库的编译配置决定的,所以调整这些选项不会有效果,必须从依赖库的编译或引用方式入手。
内容的提问来源于stack exchange,提问作者Koeno
相关产品推荐
相关产品推荐

