しっぽを追いかけて

ぐるぐるしながら考えています

Unity と猫の話題が中心   掲載内容は個人の私見であり、所属組織の見解ではありません

Live SDK をオフラインで利用すると NullReferenceException 発生!

Live SDK を Nuget でインストールしてオフライン中にデータ転送してみたら・・・

f:id:matatabi_ux:20140315230627p:plain

なぜ Null 例外?!・・・しかも try-catch で回避できない;

スタックトレースを見ると

   at Microsoft.Live.ResourceHelper.GetString(String name)
   at Microsoft.Live.Operations.ApiOperation.CreateOperationResultFrom(WebResponse response)
   at Microsoft.Live.Operations.GetUploadLinkOperation.OnWebResponseReceived(WebResponse response)
   at Microsoft.Live.Operations.WebOperation.OnGetResponseCompleted(IAsyncResult ar)
   at System.Net.LazyAsyncResult.Complete(IntPtr userToken)
   at System.Net.ContextAwareResult.CaptureOrComplete(ExecutionContext& cachedContext, Boolean returnContext)
   at System.Net.ContextAwareResult.FinishPostingAsyncOp()
   at System.Net.HttpWebRequest.BeginGetResponse(AsyncCallback callback, Object state)
   at Microsoft.Live.Operations.ApiOperation.OnExecute()
   at Microsoft.Live.Operations.Operation.InternalExecute()
   at Microsoft.Live.Operations.ApiOperation.OnRefreshTokenOperationCompleted(LiveLoginResult result)
   at Microsoft.Live.LiveAuthClient.<TryRefreshToken>d__a.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__4(Object state)
   at System.Threading.WinRTSynchronizationContext.Invoker.InvokeCore()

Live SDK 内部の ResourceHelper で例外が発生していました

これは文字列リソースが見つからないパターン・・・いろいろ試行錯誤したところ、NuGet ではなくインストーラでインストール後に Live SDK を参照した場合はエラーにならなかったことから原因が判明

Live SDK を参照する場合には Microsoft.Live.dll の参照先にインストーラでインストールされたときに追加される Microsoft.Live.pri を置いておかないと上記の例外が発生しました!

つまり Live SDKMicrosoft.Live.pri ファイル内に文字列リソースを埋め込んでいるので、これがないと文字列リソースが取得できずにアプリを巻き込んで強制終了するみたいですね

しかし Nuget では Microsoft.Live.pri ついてこない罠!なぜ?!