@fengmin The problem should not be using Mix and Match or using skins. You should be either modifying the skeleton's _Material assets (next to your other exported skeleton assets) if you want to set a special shader for all skeleton Instances and never want to use the default Spine/Skeleton shader.
Otherwise if you want to assign a custom Material, you have the options in the documentation:
https://zh.esotericsoftware.com/spine-unity-rendering#Materials
You could be using the SkeletonRendererCustomMaterials component or using SkeletonRenderer.CustomMaterialOverride programmatically.
MaterialPropertyBlock unfortunately can't change the shader, so you have to use a different material. You can use MaterialPropertyBlock each frame to change a float Material property though.
Apart from that, if you are repacking a Skin via GetRepackedSkin() you can also set the Material materialPropertySource parameter (see here) to the desired template Material, of which the shader settings will be used, or use the GetRepackedSkin() variant providing a Shader shader property (see here).