{"record":{"id":"9b18558e01e89c32","repo":"microsoft/semantic-kernel","slug":"unable-to-create-inner-step-type-from-assembly-qua","errorCode":null,"errorMessage":"Unable to create inner step type from assembly qualified name `{this.InnerStepDotnetType}`","messagePattern":"Unable to create inner step type from assembly qualified name `(.+?)`","errorType":"exception","errorClass":"KernelException","httpStatus":null,"severity":"error","filePath":"dotnet/src/Experimental/Process.Runtime.Dapr/DaprStepInfo.cs","lineNumber":50,"sourceCode":"    /// </summary>\n    public required KernelProcessStepState State { get; init; }\n\n    /// <summary>\n    /// A read-only dictionary of output edges from the Step.\n    /// </summary>\n    public required Dictionary<string, List<KernelProcessEdge>> Edges { get; init; }\n\n    /// <summary>\n    /// Builds an instance of <see cref=\"KernelProcessStepInfo\"/> from the current object.\n    /// </summary>\n    /// <returns>An instance of <see cref=\"KernelProcessStepInfo\"/></returns>\n    /// <exception cref=\"KernelException\"></exception>\n    public KernelProcessStepInfo ToKernelProcessStepInfo()\n    {\n        Type? innerStepType = Type.GetType(this.InnerStepDotnetType);\n        if (innerStepType is null)\n        {\n            throw new KernelException($\"Unable to create inner step type from assembly qualified name `{this.InnerStepDotnetType}`\");\n        }\n\n        if (!typeof(KernelProcessStep).IsAssignableFrom(innerStepType))\n        {\n            throw new KernelException($\"Type '{this.InnerStepDotnetType}' is not a valid KernelProcessStep type.\");\n        }\n\n        return new KernelProcessStepInfo(innerStepType, this.State, this.Edges);\n    }\n\n    /// <summary>\n    /// Initializes a new instance of the <see cref=\"DaprStepInfo\"/> class from an instance of <see cref=\"KernelProcessStepInfo\"/>.\n    /// </summary>\n    /// <returns>An instance of <see cref=\"DaprStepInfo\"/></returns>\n    public static DaprStepInfo FromKernelStepInfo(KernelProcessStepInfo kernelStepInfo)\n    {\n        Verify.NotNull(kernelStepInfo, nameof(kernelStepInfo));\n","sourceCodeStart":32,"sourceCodeEnd":68,"githubUrl":"https://github.com/microsoft/semantic-kernel/blob/c028a0c7dc4f0814cdcbaba9d998f187a41197bf/dotnet/src/Experimental/Process.Runtime.Dapr/DaprStepInfo.cs#L32-L68","documentation":"Thrown when Type.GetType cannot resolve the InnerStepDotnetType assembly-qualified name to a .NET Type. The Dapr runtime stores each step's fully qualified type name and must rehydrate it; if the assembly is missing or the name is malformed, type resolution returns null.","triggerScenarios":"DaprStepInfo.ToKernelProcessStepInfo() calls Type.GetType(this.InnerStepDotnetType); a null result means the runtime cannot find the assembly or the type within it.","commonSituations":"The step type lives in an assembly not loaded by the Dapr actor host, the assembly-qualified name was truncated/stored without assembly info, or the type was renamed/moved between versions. Common when deploying actors separately from the step definition assemblies.","solutions":["Ensure the assembly containing the KernelProcessStep type is deployed and loaded by the Dapr actor host process.","Verify InnerStepDotnetType is a full assembly-qualified name (includes assembly, version, culture, PublicKeyToken) as Type.GetType requires.","If the type was renamed/moved, register an AssemblyLoadContext or TypeForwardedFrom redirection, or re-persist the process with the new type name.","Check for trimming/AOT settings that may have stripped the type metadata."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"foreach (var step in daprSteps)\n{\n    var t = Type.GetType(step.InnerStepDotnetType);\n    if (t is null)\n        throw new InvalidOperationException($\"Cannot resolve type '{step.InnerStepDotnetType}'; load the assembly first.\");\n}","typeGuard":"public static bool IsResolvableStepType(string assemblyQualifiedTypeName) =>\n    Type.GetType(assemblyQualifiedTypeName) is not null;","tryCatchPattern":"try\n{\n    var info = daprStepInfo.ToKernelProcessStepInfo();\n}\ncatch (KernelException ex) when (ex.Message.Contains(\"Unable to create inner step type\"))\n{\n    _logger.LogError(ex, \"Step type assembly not loaded; verify deployment.\");\n    throw;\n}","preventionTips":["Deploy all step definition assemblies to the Dapr actor host.","Store full assembly-qualified type names (assembly + version + PublicKeyToken).","Watch for trimming/AOT removing type metadata."],"tags":["dapr","process-runtime","type-resolution","assembly-loading","reflection"],"backgroundTag":null,"analyzedSha":"c028a0c7dc4f0814cdcbaba9d998f187a41197bf","analyzedAt":"2026-08-13T13:48:05.040Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}