Live SDK を Nuget でインストールしてオフライン中にデータ転送してみたら・・・
なぜ 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 SDK は Microsoft.Live.pri ファイル内に文字列リソースを埋め込んでいるので、これがないと文字列リソースが取得できずにアプリを巻き込んで強制終了するみたいですね
しかし Nuget では Microsoft.Live.pri ついてこない罠!なぜ?!