Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. Dismiss Notice

Update to 3.0.1 collision with Moq framework

Discussion in 'Unity Ads & User Acquisition' started by kaladrius-trip, Feb 12, 2019.

  1. kaladrius-trip

    kaladrius-trip

    Joined:
    Jan 14, 2014
    Posts:
    4
    When i update to new version of Advertisement from package manager, i have little bit problem with delegate
    Action<T1, T2, T3, T4, T5>
    For reproduce this exception you should have Unity 2018.3.5f1 and you may install UniRx Ver 6.2.2 and Advertisement 3.0.1 from package manager.
    The type 'Action<T1, T2, T3, T4, T5>' exists in both 'Moq, Version=4.0.10827.0, Culture=neutral, PublicKeyToken=69f491c39445e920' and 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'
     
    Bladgharm likes this.
  2. HaakonL

    HaakonL

    Joined:
    Mar 13, 2014
    Posts:
    123
    Same here.
     
    Bladgharm likes this.
  3. Bladgharm

    Bladgharm

    Joined:
    Jan 22, 2014
    Posts:
    3
    I have this problem in my project too. I comment conflicted part of the code, but for me it is important. Any suggestions how to fix it?
     
  4. HaakonL

    HaakonL

    Joined:
    Mar 13, 2014
    Posts:
    123
    I have made a temporary fix using a custom class as the Action argument instead:

    In UniTaskTrackerTreeView replace the BuildRoot function on line 125 with this:


    Code (CSharp):
    1. protected override TreeViewItem BuildRoot()
    2.         {
    3.             var root = new TreeViewItem { depth = -1 };
    4.  
    5.             var children = new List<TreeViewItem>();
    6.  
    7.             TaskTracker.ForEachActiveTask(stupid =>
    8.             {
    9.                 children.Add(new UniTaskTrackerViewItem(stupid.TrackingId) { TaskType = stupid.TypeName, Status = stupid.Status.ToString(), Elapsed = (DateTime.UtcNow - stupid.AddTime).TotalSeconds.ToString("00.00"), Position = stupid.StackTrace });
    10.             });
    11.  
    12.             CurrentBindingItems = children;
    13.             root.children = CurrentBindingItems as List<TreeViewItem>;
    14.             return root;
    15.         }
    In TaskTracker replace the ForEachActiveTask with this:

    Code (CSharp):
    1. public static void ForEachActiveTask(Action<StupidFix> action)
    2.         {
    3.             lock (listPool)
    4.             {
    5.                 var count = tracking.ToList(ref listPool, clear: false);
    6.                 try
    7.                 {
    8.                     for (int i = 0; i < count; i++)
    9.                     {
    10.                         string typeName = null;
    11.                         var keyType = listPool[i].Key.GetType();
    12.                         if (keyType.IsNested)
    13.                         {
    14.                             typeName = keyType.DeclaringType.Name + "." + keyType.Name;
    15.                         }
    16.                         else
    17.                         {
    18.                             typeName = keyType.Name;
    19.                         }
    20.                         action(new StupidFix(listPool[i].Value.trackingId, typeName, listPool[i].Key.Status, listPool[i].Value.addTime, listPool[i].Value.stackTrace));
    21.                         listPool[i] = new KeyValuePair<IAwaiter, (int trackingId, DateTime addTime, string stackTrace)>(null, (0, default(DateTime), null)); // clear
    22.                     }
    23.                 }
    24.                 catch
    25.                 {
    26.                     listPool.Clear();
    27.                     throw;
    28.                 }
    29.             }
    30.         }

    Add a new cs class somewhere in your project:

    Code (CSharp):
    1. public class StupidFix
    2.     {
    3.         public StupidFix(int trackingId, string typeName, AwaiterStatus status, DateTime addTime, string stackTrace)
    4.         {
    5.             TrackingId = trackingId;
    6.             TypeName = typeName;
    7.             Status = status;
    8.             AddTime = addTime;
    9.             StackTrace = stackTrace;
    10.         }
    11.  
    12.         public int TrackingId { get; }
    13.         public string TypeName { get; }
    14.         public AwaiterStatus Status { get; }
    15.         public DateTime AddTime { get; }
    16.         public string StackTrace { get; }
    17.     }
     
  5. DenisasK

    DenisasK

    Unity Technologies

    Joined:
    Oct 13, 2016
    Posts:
    89
    For a quick workaround, you can try to replace Ads package with Monetization 3.0.1 AssetStore package, it should help to get rid of the error.
     
  6. HaakonL

    HaakonL

    Joined:
    Mar 13, 2014
    Posts:
    123
    That's better than my solution. But I am quite puzzled with all these double packages you keep going, Unity. Such a mess. When to use Package Manager and when to use the Asset Store is a big mystery. And some stuff even requires both a package and the asset store equivalent.
     
    braedenk likes this.
  7. kaladrius-trip

    kaladrius-trip

    Joined:
    Jan 14, 2014
    Posts:
    4
    Fixed in 3.0.2 version from package manager.
    Thanks.
     
    DenisasK likes this.