[WP81] Serialization Weaver issue with Assembly-CSharp.dll

I was isolating a runtime data serialization error in a new smaller project while I ran on an issue of the Serialization Weaver.

Error building Player: UnityException: Failed to run serialization weaver with command "Temp\StagingArea\Data\Managed\Assembly-CSharp.dll" -pdb -verbose -unity-engine=Temp\StagingArea\Data\Managed\UnityEngine.dll "Temp\StagingArea\TempSerializationWeaver".
Symbols will be read from Temp\StagingArea\Data\Managed\UnityEngine.pdb
Weaving assembly C:\dev\UnityProjects\TestProject\TestProject\Temp\StagingArea\Data\Managed\Assembly-CSharp.dll
Symbols will be read from Temp\StagingArea\Data\Managed\Assembly-CSharp.pdb
Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'ExternalLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'
   � Mono.Cecil.BaseAssemblyResolver.Resolve(AssemblyNameReference name, ReaderParameters parameters)
   � Mono.Cecil.DefaultAssemblyResolver.Resolve(AssemblyNameReference name)
   � Mono.Cecil.MetadataResolver.Resolve(TypeReference type)
   � Unity.CecilTools.Extensions.ResolutionExtensions.Resolve[TReference,TDefinition](TReference reference, Func`2 resolve)
   � Unity.CecilTools.Extensions.TypeDefinitionExtensions.IsSubclassOf(TypeDefinition type, String baseTypeName)
   � Unity.Serialization.Weaver.MethodEmitterBase.WillUnitySerialize(FieldDefinition fieldDefinition)
   � Unity.Serialization.Weaver.SerializeMethodEmitter.ShouldProcess(FieldDefinition fieldDefinition)
   � System.Linq.Enumerable.<>c__DisplayClassf`1.<CombinePredicates>b__e(TSource x)
   � System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   � Unity.Serialization.Weaver.MethodEmitterBase.EmitMethodBody()
   � Unity.Serialization.Weaver.SerializationWeaver.AddSerializeMethod()
   � Unity.Serialization.Weaver.SerializationWeaver.Weave()
   � usw.Weaver.WeaveAssembly(String assemblyPath, AssemblyDefinition unityEngineAssemblyDefinition)
   � usw.Weaver.Weave()
   � usw.Program.RunProgram(ConversionOptions options)
   � usw.Program.Main(String[] args)
  1. Importing both WP81 and standalone windows DLLs of my class library was successful
  2. It’s only when building to Windows Store/Phone8.1 SDK that the error occurs.

My class library contains one class MyGenericClass:

using System;

namespace ExternalLib
{
    [Serializable]
    public abstract class MyGenericClass<T>
    {
        public T m_Value;
    }
}

My project class using the generic one looks like:

using System;
using ExternalLib;

[Serializable]
public class MyClass : MyGenericClass<int>
{
    public int GetValue()
    {
        return m_Value;
    }
}

Removing inheritance of MyGenericClass from MyClass prevents this issue from happening, but I still want to make it work…
I was also suspecting Generic type classes could have anything to do with this but still, I’m already using this kind of generic classes and I know it’s working.

What am I not doing correctly?

The answer from Unity: https://fogbugz.unity3d.com/default.asp?709358_jp9bhq80i4ob5h8f

I should not be using Serializable class in platform-specific plugins…
Just avoid, at all cost, the use of [Serializable] tagged classes in plugins meant to be WP8.1 specific and simply move them to one that can be “Any” platform.