UE4 try catch 打包报错

本文详细记录了解决UE4 C++项目中使用try-catch导致的打包失败问题的过程。通过调整项目配置文件,成功启用了异常处理机制,并解决了不同环境下的打包问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UE4 C++源码 在Visual studio 2015中使用过程发现添加 try catch 之后打包通不过。追溯错误提示是C++的 try catch 代码。网上查找之后发现
https://blog.youkuaiyun.com/SC32024826/article/details/78710672 

在项目文件.build.cs  添加一行代码:

 UEBuildConfiguration.bForceEnableExceptions = true;
 
在代码尝试添加。发现UEBuildConfiguration 不识别。 中间 Ctrl + F 查找到跟代码相关语句 。在查找的xml文件中添加 bForceEnableExceptions 同时在唯一查找的cs 文件 仿照添加 bForceEnableExceptions 。结果生成失败。还原该部分修改继续追查
https://answers.unrealengine.com/questions/657485/uebuildconfigurationbforceenableexceptions-in-416.html
在该网站看到 4.16之后似乎改为   UEBuildConfiguration.bEnableExceptions = true;  但是还是不能解决 build.cs文件添加 代码后提示UEBuildConfiguration 不识别问题。刚才的链接下面有一段论坛链接
https://forums.unrealengine.com/development-discussion/c-gameplay-programming/118722-c-4-16-transition-guide/page4
打开发现,提到要在 target.cs添加 “ UEBuildConfiguration.bForceEnableExceptions = true;” 问题依然没有解决。
后面再ue4官网搜索C++相关帖子得到如下链接
https://answers.unrealengine.com/questions/799396/how-to-detect-if-its-editor-build-in-buildcs.html
 
 UEBuildConfiguration.bForceEnableExceptions = true; 更改为   。 更改位置 在 XXXXX.Target.cs 

public class XXXXXX: TargetRules
{
public XXXXX(TargetInfo Target) : base(Target)
{

……

Target.bForceEnableExceptions = true;

}

然后没有报错能生成文件。后续再观察。
 
 
经过试验,在UE4.19.还是不行。在ue4qq群询问过并不使用try catch ,就自己把代码可能出问题的屏蔽掉。但是从以上查找的数据看,ue4至少有段时间是支持try Catch 。 如果有谁找到方法回复我。

 
2018-07-31
不甘心没解决。 于是搜索在UE4官网搜索“UEBuildConfiguration”, 4.18更新日志最后提到 “不推荐使用ModuleRules类中的BuildConfiguration和UEBuildConfiguration别名。 这些已经实现为传递给几个引擎版本的构造函数的ReadOnlyTargetRules实例的别名。”(查找的时候忽略了ReadOnlyTargetRules,不然会更快接近真相)。知道弃用UEBuildConfiguration。直接搜索上面提到的bEnableExceptions
https://docs.unrealengine.com/en-us/Search-Results?search=bEnableExceptions
打开搜索到的链接“https://docs.unrealengine.com/en-us/Programming/UnrealBuildSystem/ModuleFiles”发现
提到bulid.cs 文件里面 代码层次如下:
using UnrealBuildTool;
using System.Collections.Generic;
public class MyModule : ModuleRules
{
    public MyModule(ReadOnlyTargetRules Target) : base(Target)
    {
        // Settings go here
    }
}

这样的结构可以直接使用 

Target.bEnableExceptions = true;

但是我使用的代码层次是

using UnrealBuildTool;
using System.Collections.Generic;

public class XXXTarget : TargetRules
{
    public XXXTarget(TargetInfo Target) : base(Target)
    {
        Type = TargetType.Game;
        ExtraModuleNames.Add("szmUEDesign");
    }
}

并没有ReadOnlyTargetRules。(搜索到这边其实应该解决问题了,可是自己忽略重点继续花时间搜索)

后面直接在源代码搜索TargetInfo 。 发现TargetInfo 的成员变量都跟异常不相关。但是,在它的成员变量在的文件"UeBulidTarget.cs"能搜索到bEnableExceptions 。发现 bEnableExceptions出现在以下环境

    GlobalCompileEnvironment.bEnableExceptions = Rules.bForceEnableExceptions || Rules.bBuildEditor;

此处的Rules定义如下

    public ReadOnlyTargetRules Rules;

追述ReadOnlyTargetRules 到TargetRulers.cs

    public partial class ReadOnlyTargetRules
    {
……
        /// <summary>
        /// The writeable TargetRules instance
        /// </summary>
        TargetRules Inner;
……
public bool bForceEnableExceptions
        {
            get { return Inner.bForceEnableExceptions; }
        }
……
       }


TargetRules定义
    public abstract class TargetRules
    {

  ……
/// <summary>
        /// Enable exceptions for all modules.
        /// </summary>
        [RequiresUniqueBuildEnvironment]
        public bool bForceEnableExceptions = false;
      }

 

到这边就明白调用规则了。 直接在自己的bulid文件增加以下代码,启用异常检测机制。

using UnrealBuildTool;
using System.Collections.Generic;

public XXXTarget : TargetRules
{
    public XXXTarget(TargetInfo Target) : base(Target)
    {
        Type = TargetType.Game;
        ExtraModuleNames.Add("szmUEDesign");
        this.bForceEnableExceptions = true;
    }
}

 

 

4.18(不含)之前在 bulid.cs文件添加 UEBuildConfiguration.bForceEnableExceptions = true;或者 UEBuildConfiguration.bEnableExceptions = true;  。 UE4.18之后使用         this.bForceEnableExceptions = true;解决异常

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2019-04-02
问题:代码添加 this.bForceEnableExceptions  = true; UE4.19编辑器环境可以运行,但是打包失败。         
解答:该问题是因为使用ue4官方下载生成好的环境。 当调用 this.bForceEnableExceptions  时,因为和编辑好的环境冲突,所以失败。 解决的办法是下载UE4官方源代码,然后建立sln文件,本地重新生成。 然后项目引用生成后的ue4引擎。这时候打包和运行都正常了。

转载于:https://www.cnblogs.com/PiaoLingJiLu/p/9373452.html

<think>好的,用户遇到了UE4打包报错“unable to find target xxx”,我需要帮他解决这个问题。首先,得确定这个错误的具体原因。常见的原因可能有项目配置问题、目标名称不匹配或者生成文件损坏。 首先,我应该检查目标名称是否正确。用户可能在打包时输入了错误的目标名称,比如拼写错误或者大小写不一致。需要确认.uproject文件中的TargetName是否和实际配置的一致。 然后,考虑项目配置是否正确。如果用户最近修改了Target.cs文件或者项目设置,可能会导致找不到目标。建议他检查Target.cs中的配置,确保继承自TargetRules,并且命名空间和类名正确。例如,是否在Target.cs里正确声明了TargetType为Game。 接下来,生成文件的问题。有时候Intermediate或Saved文件夹里的缓存文件会导致问题,需要清理这些文件夹并重新生成项目文件。使用GenerateProjectFiles脚本来重新生成,或者在IDE里重新生成解决方案。 还有可能是安装的引擎版本有问题,比如部分文件缺失。验证引擎的完整性或者重新安装引擎可能有效。另外,检查项目路径是否有特殊字符或过长,这有时也会导致问题。 如果这些步骤都没解决,建议用户查看详细的日志文件,通常在Saved/Logs目录下,看看有没有更具体的错误信息。根据日志中的线索进一步排查,比如依赖项缺失或插件配置错误。 最后,确保用户使用的打包命令正确,比如在命令行中指定了正确的目标和配置。例如:`UE4Editor-Cmd.exe Project.uproject -BuildCookRun -platform=Win64 -clientconfig=Development -serverconfig=Development -target=Game`中的-target参数是否正确。 总结下来,应该分步骤引导用户检查名称、配置、生成文件、引擎完整性以及路径问题,最后查看日志获取更多信息。需要保持回答结构清晰,逐步排除可能的原因,帮助用户自己定位问题。</think>在Unreal Engine 4打包时遇到`unable to find target xxx`错误,通常与项目配置或生成文件相关。以下是分步排查指南: --- ### **步骤1:确认目标名称一致性** 1. 检查`.uproject`文件内容 - 用文本编辑器打开项目根目录的`.uproject`文件 - 验证`"TargetName": "XXX"`字段是否与打包命令中的目标名称一致 ```json { "FileVersion": 3, "Targets": [ { "Name": "GameName", // 这里必须与打包参数匹配 "TargetType": "Game" } ] } ``` 2. 检查命令行参数 - 若通过命令行打包,确认`-target=`参数是否拼写正确 ```bash # 示例:必须与.uproject中的"Name"字段一致 UnrealBuildTool.exe Development Win64 -Target=GameName ``` --- ### **步骤2:验证项目配置** 1. 检查`Source`目录结构 - 确保存在`Source/[ProjectName].Target.cs`文件 - 典型文件路径示例: ``` YourProject/ ├── Source/ │ ├── YourProject.Target.cs │ └── YourProjectEditor.Target.cs ``` 2. 检查`.Target.cs`文件内容 ```csharp using UnrealBuildTool; public class YourProjectTarget : TargetRules // 类名必须匹配 { public YourProjectTarget(TargetInfo Target) : base(Target) { Type = TargetType.Game; // 必须明确定义TargetType // 其他配置... } } ``` --- ### **步骤3:重新生成项目文件** 1. 删除生成文件 - 删除以下目录: - `Binaries/` - `Intermediate/` - `Saved/` 2. 重新生成项目文件 - 右键点击`.uproject`文件 > `Generate Visual Studio project files` - 或通过命令行执行: ```bash Engine/Build/BatchFiles/GenerateProjectFiles.bat -project="YourProject.uproject" -game ``` --- ### **步骤4:检查引擎版本兼容性** 1. 验证引擎版本 - 在项目根目录打开`.uproject`文件右键 > Switch Unreal Engine version - 确保选择的引擎版本与项目要求的版本匹配 2. 修复引擎安装 - 通过Epic Games Launcher验证引擎完整性: ``` 库 > 引擎版本 > 下拉箭头 > 验证 ``` --- ### **步骤5:排查路径问题** 1. 检查特殊字符 - 确保项目路径不含中文、空格或特殊符号(建议使用全英文路径) 2. 缩短路径长度 - 尝试将项目移动到更短的路径,如`D:\UEProjects\` --- ### **步骤6:查看详细日志** 1. 获取完整错误日志 - 打开`Saved/Logs/YourProject.log` - 搜索`Critical: ERROR: Unable to find target`附近上下文 2. 典型日志线索示例: ``` LogInit: Display: Running: D:/UE4/Engine/Binaries/DotNET/UnrealBuildTool.exe Development Win64 -Project="D:/Project/TestProject/TestProject.uproject" -TargetType=Game -Progress LogCompile: Error: Unable to find target 'Game' (vs. 'TestProject') ``` --- ### **附加解决方案** 若上述步骤无效,尝试: 1. 新建空白项目测试打包功能 2. 检查防病毒软件是否误删编译文件 3. 重装Visual Studio构建工具 4. 更新显卡驱动(某些情况下会影响Shader编译) 建议按照此流程逐步排查,通常90%的同类错误可通过清理生成文件+验证目标名称解决。如果问题仍未解决,建议提供完整的日志内容进行进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值