InjectFix icon indicating copy to clipboard operation
InjectFix copied to clipboard

报错InvalidOperationException: The builder was not properly initialized.

Open QYCDev opened this issue 5 years ago • 10 comments

加载成功,热修的东西都加载出来了,但是报错(现在没发现这个报错影响了什么)。 InvalidOperationException: The builder was not properly initialized. at System.Resources.SatelliteContractVersionAttribute.get_Version () [0x00000] in <00000000000000000000000000000000>:0 at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <00000000000000000000000000000000>:0 at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in <00000000000000000000000000000000>:0 at IFix.Core.ReflectionMethodInvoker.Invoke (IFix.Core.VirtualMachine virtualMachine, IFix.Core.Call& call, System.Boolean isInstantiate) [0x00000] in <00000000000000000000000000000000>:0 at IFix.Core.ExternInvoker.Invoke (IFix.Core.VirtualMachine vm, IFix.Core.Call& call, System.Boolean isInstantiate) [0x00000] in <00000000000000000000000000000000>:0 at IFix.Core.VirtualMachine.Execute (IFix.Core.Instruction* pc, IFix.Cor

QYCDev avatar Nov 17 '20 09:11 QYCDev

调用你的SatelliteContractVersionAttribute.Version的时候,你这个属性抛了异常

chexiongsheng avatar Nov 17 '20 09:11 chexiongsheng

调用你的SatelliteContractVersionAttribute.Version的时候,你这个属性抛了异常

项目里没有这个调用,我在编辑器里跑了下没有这个异常,在Android上跑的时候报这个错误

QYCDev avatar Nov 17 '20 13:11 QYCDev

调用你的SatelliteContractVersionAttribute.Version的时候,你这个属性抛了异常

项目里没有这个调用,我在编辑器里跑了下没有这个异常,在Android上跑的时候报这个错误

那就是你Android调用了。

chexiongsheng avatar Nov 17 '20 13:11 chexiongsheng

调用你的SatelliteContractVersionAttribute.Version的时候,你这个属性抛了异常

项目里没有这个调用,我在编辑器里跑了下没有这个异常,在Android上跑的时候报这个错误

那就是你Android调用了。

    [IFix.Patch]
    public async Task Initialize()
    {
        Debug.Log("测试await热修复");
        await TestAsync(); //热更添加
        Debug.Log("测试await热修复1");
    }
   //原有
   public async Task TestAsync()
    {
        Debug.Log("测试await热修复0.1");
        await Task.Delay(10);
        Debug.Log("测试await热修复0.2");
    }

我测试了下发现,只要修改async Task方法,然后这个方法里有await就会报这个错误。

QYCDev avatar Nov 18 '20 06:11 QYCDev

调用你的SatelliteContractVersionAttribute.Version的时候,你这个属性抛了异常

项目里没有这个调用,我在编辑器里跑了下没有这个异常,在Android上跑的时候报这个错误

那就是你Android调用了。

    [IFix.Patch]
    public async Task Initialize()
    {
        Debug.Log("测试await热修复");
        await TestAsync(); //热更添加
        Debug.Log("测试await热修复1");
    }
   //原有
   public async Task TestAsync()
    {
        Debug.Log("测试await热修复0.1");
        await Task.Delay(10);
        Debug.Log("测试await热修复0.2");
    }

我测试了下发现,只要修改async Task方法,然后这个方法里有await就会报这个错误。

我用附带的Helloworld工程又测试了一下,用Fix(Android)打出来的补丁,放进apk中await就无法热修。但是用Fix打出来的补丁,放进apk里就能热修await

QYCDev avatar Nov 18 '20 07:11 QYCDev

@QYC-Unity 同样的问题,在task或者valuetask里面调用await会出现同样的报错。 把task或者valuetask换成unitask后,可以正常热更

lafirest avatar Nov 24 '20 03:11 lafirest

同样的问题, 老哥们有结论吗?

foxandck avatar Nov 24 '20 07:11 foxandck

同样的问题, 老哥们有结论吗?

我这边不用平台fix,直接用fix打的补丁可以

QYCDev avatar Nov 24 '20 08:11 QYCDev

同样的问题, 老哥们有结论吗?

我这边不用平台fix,直接用fix打的补丁可以

我也试试看, 不过这样子感觉怪怪的

foxandck avatar Nov 24 '20 09:11 foxandck

injectfix是按实际编译出来的dll里的指令来生成补丁,fix android有这个调用,也就是android编译的dll有这个调用。

chexiongsheng avatar Nov 27 '20 03:11 chexiongsheng