TemplateText TT 在Runtime发生 Could not load type ...... because the format is invalid

Severity Code Description Project File Line Suppression State
Error Running transformation: System.TypeLoadException: Could not load type ‘TKTFRS.BondVarietyEx’ from assembly ‘TKTFRSCommonDataTypeLibrary, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null’ because the format is invalid.
at System.Signature.GetSignature(Void* pCorSig, Int32 cCorSig, RuntimeFieldHandleInternal fieldHandle, IRuntimeMethodInfo methodHandle, RuntimeType declaringType)
at System.Reflection.RuntimeMethodInfo.get_ReturnType()
at norlib.CommonHelper.GetAsyncMethods(Type arg_tpInterface) in E:\Projects\norlib.tt\Common.cs:line 40
at Microsoft.VisualStudio.TextTemplatingFBE6B5AC633D2EBF765C1C720C201C41C55150808C444DDC45A30A738B537D2C6396CF0B87B3F8DD688B7E5B8C42607BD3EFFEC8C03484E019EEDA5489CE5F1F.GeneratedTextTransformation.Async2Sync(Type arg_tpInterface)
at Microsoft.VisualStudio.TextTemplatingFBE6B5AC633D2EBF765C1C720C201C41C55150808C444DDC45A30A738B537D2C6396CF0B87B3F8DD688B7E5B8C42607BD3EFFEC8C03484E019EEDA5489CE5F1F.GeneratedTextTransformation.TransformText() IWindModuleClient_TKTFRS E:\Projects\TKTFRS\Server\IWindModuleClient_TKTFRS\helper.TKTFRS.sync.tt 1

在这个例子中我们是BondVarietyEx这个对象无法装载,这个特别奇怪。因为编译完全没有错误,.net 版本也正确, 也都是AnyCpu,

去掉含有BondVarietyEx的函数后再次跑tt则没有错误,说明有罪的就是BondVarietyEx, 仔细查看BondVarietyEx的声明:

  [Serializable]
    [StructLayout(LayoutKind.Sequential)]
    public class BondVarietyEx
        : BondVariety
    {
        public double 转换因子
        {
            get
            {
                return _cf;
            }
            set
            {
                _cf = value;
            }
        }
        public static BondVarietyEx FromBondVariety(BondVariety arg_BondVariety, double arg_d转换因子)
        {
           ........
        }

        double _cf;
    }

发现[StructLayout(LayoutKind.Sequential)], 但是其基类BondVariety已经放弃了这个Attribute, 因为无法做到定长, 但是衍生类却声明为定长, 难道是这个错误?

去掉此Attribute后一切OK~

posted on   norsd  阅读(447)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示