ある日、マシン A で作成した Visual Studio 2012 の WPF のプロジェクトを、別のマシン B で開き、WPF デザイナを表示しようとしたら、「Microsoft Silverlight SDK 5.0 は見つかりませんでした」なるエラーが表示され、画面をみることができないという自体に出くわした・・・(汗
マシン A では問題なく画面は表示されるのに・・・。もちろん マシン A, B ともに Visual Studio のバージョンは同一です。
「デザイナーを再度読み込」んでみてもダメ。ただ、この状態でもビルドは通る。純粋にデザイナーの表示がダメなだけ。
エラーの詳細をみても確かに Silverlight に関わるエラーであることには間違いない。でもこのプロジェクト、Silverlight ではなく WPF なんですけど・・・
System.NotSupportedException Microsoft Silverlight SDK 5.0 は見つかりませんでした。正しいバージョンの Microsoft Silverlight SDK がインストールされていることを確認してください。 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.STAMarshaler.WaitForCompletion(NestedCallContext nestedCallContext, BlockingCall call, WaitHandle timeoutSignal) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.STAMarshaler.MarshalOutSynchronous(Action action, Int32 targetApartmentId, WaitHandle aborted, WaitHandle timeoutSignal) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.STAMarshaler.MarshalOut(Action action, Int32 targetApartmentId, WaitHandle aborted, CallSynchronizationMode syncMode, WaitHandle timeoutSignal) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.ThreadMarshaler.MarshalOut[TValue](RemoteHandle`1 targetObject, Action action, CallSynchronizationMode syncMode) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.ThreadMarshaler.MarshalOut[TResult,TValue](RemoteHandle`1 targetObject, Func`2 func, CallSynchronizationMode syncMode) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.LocalDesignerService.CreateDesignerImpl(IHostSourceItem item, IHostTextEditor editor, RemoteCancellationToken remoteCancelToken) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.LocalDesignerService.<>c__DisplayClass12.b__11(RemoteCancellationToken remoteToken) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.LocalDesignerService.CallWithCancellation[TResult](CancellationToken cancelToken, Func`2 func) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.LocalDesignerService.Microsoft.Expression.DesignHost.IDesignerService.CreateDesigner(IHostSourceItem item, IHostTextEditor editor, CancellationToken cancelToken) 場所 Microsoft.Expression.DesignHost.IsolatedDesignerService.IsolatedDesignerView.CreateDesignerViewInfo(CancellationToken cancelToken) System.NotSupportedException Microsoft Silverlight SDK 5.0 は見つかりませんでした。正しいバージョンの Microsoft Silverlight SDK がインストールされていることを確認してください。 Server stack trace: 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.STAMarshaler.WaitForCompletion(NestedCallContext nestedCallContext, BlockingCall call, WaitHandle timeoutSignal) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.STAMarshaler.MarshalIn(Action action, Int32 targetApartmentId) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.ThreadMarshaler.MarshalIn(IRemoteObject targetObject, Action action) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.ThreadMarshaler.MarshalIn[TResult](IRemoteObject targetObject, Func`1 func) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.RemoteDesignerService.Microsoft.Expression.DesignHost.Isolation.Remoting.IRemoteDesignerService.CreateDesigner(IRemoteHostSourceItem remoteItem, IRemoteHostTextEditor remoteEditor, IRemoteCancellationToken remoteToken) 場所 System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs) 場所 System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg) Exception rethrown at [0]: 場所 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) 場所 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.IRemoteDesignerService.CreateDesigner(IRemoteHostSourceItem remoteItem, IRemoteHostTextEditor remoteEditor, IRemoteCancellationToken cancelToken) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.LocalDesignerService.<>c__DisplayClass8. b__6(IRemoteDesignerService d) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.ThreadMarshaler.<>c__DisplayClass4`2. b__3() 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.STAMarshaler.Call.InvokeWorker() System.NotSupportedException Microsoft Silverlight SDK 5.0 は見つかりませんでした。正しいバージョンの Microsoft Silverlight SDK がインストールされていることを確認してください。 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.STAMarshaler.WaitForCompletion(NestedCallContext nestedCallContext, BlockingCall call, WaitHandle timeoutSignal) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.STAMarshaler.MarshalOutSynchronous(Action action, Int32 targetApartmentId, WaitHandle aborted, WaitHandle timeoutSignal) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.STAMarshaler.MarshalOut(Action action, Int32 targetApartmentId, WaitHandle aborted, CallSynchronizationMode syncMode, WaitHandle timeoutSignal) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.ThreadMarshaler.MarshalOut[TValue](RemoteHandle`1 targetObject, Action action, CallSynchronizationMode syncMode) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.ThreadMarshaler.MarshalOut[TResult,TValue](RemoteHandle`1 targetObject, Func`1 func, CallSynchronizationMode syncMode) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.RemoteWrapper`1.Invoke[T](Func`2 action) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.RemoteHostPlatformService.Microsoft.Expression.DesignHost.IHostPlatformService.GetProperty(String frameworkSpec, String propertyName) 場所 Microsoft.Expression.DesignSurface.PlatformContext.GetProperty(String frameworkSpec, String propertyName) 場所 Microsoft.Expression.Platform.PlatformService.GetProperty(String frameworkSpec, String propertyName) 場所 Microsoft.Expression.DesignSurface.Assemblies.SilverlightAssemblyResolver.GetSilverlightPlatformPaths(String assemblyName) 場所 Microsoft.Expression.DesignSurface.Assemblies.SilverlightAssemblyResolver.LoadSilverlightPlatformAssembly(String assemblyName) 場所 Microsoft.Expression.DesignSurface.Assemblies.SilverlightAssemblyResolver.ResolveRuntimeAssembly(AssemblyName assemblyName) 場所 Microsoft.Expression.Platform.PlatformService.ResolvePlatformAssembly(AssemblyName assemblyName) 場所 Microsoft.Expression.DesignSurface.DesignerContext.PlatformAssemblyResolver.ResolveAssembly(AssemblyName assemblyName) 場所 Microsoft.Expression.DesignSurface.Assemblies.AssemblyService.ResolveAssembly(AssemblyName assemblyName, IEnumerable`1 assemblyResolverTable) 場所 Microsoft.Expression.DesignSurface.Assemblies.AssemblyService.ResolveAssembly(String assemblyPath, String assemblyFullName, String projectPath, IHostShadowCopyTask hostShadowCopyTask) 場所 Microsoft.Expression.DesignSurface.Assemblies.ProjectAssemblyResolver.GetAssemblyInformation(String path, String assemblyFullName) 場所 Microsoft.Expression.DesignSurface.Assemblies.ProjectAssemblyResolver.GetAssemblyInformation(IHostReferenceItem reference) 場所 Microsoft.Expression.DesignSurface.Assemblies.ProjectAssemblyResolver.UpdateAssemblyReferences(IEnumerable`1 referencesToUpdate) 場所 Microsoft.Expression.DesignSurface.Assemblies.ProjectAssemblyResolver..ctor(IHostProject project, DesignerContext designerContext) 場所 Microsoft.Expression.DesignSurface.Assemblies.ProjectAssemblyService.<.ctor>b__0(IHostProject project) 場所 Microsoft.Expression.Utility.Collections.SuspendableKeyedCollection`2.CreateItems(TKey key) 場所 System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) 場所 Microsoft.Expression.Utility.Collections.SuspendableKeyedCollection`2.GetItem(TKey key) 場所 Microsoft.Expression.DesignSurface.Assemblies.ProjectAssemblyService.GetProjectAssemblyResolver(IHostProject project) 場所 Microsoft.Expression.DesignSurface.Project.ProjectContextBase.Initialize() 場所 Microsoft.Expression.DesignSurface.Project.XamlProjectContext.Initialize() 場所 Microsoft.Expression.DesignSurface.Project.ProjectContextManager.GetProjectContext(IHostProject project, IPlatform platform, Boolean create) 場所 Microsoft.Expression.DesignSurface.Project.ProjectContextManager. d__d.MoveNext() 場所 Microsoft.Expression.DesignSurface.Project.ProjectContextBase.XamlProjectMetadata.GetAssemblyForTypeResolve(String assemblyName) 場所 Microsoft.Expression.DesignModel.Metadata.TypeResolver.GetType(ClrNamespaceIdentifier clrNamespaceIdentifier, String typeName) 場所 Microsoft.Expression.DesignModel.Metadata.TypeResolver.ResolveType(ITypeId typeId) 場所 Microsoft.Expression.DesignModel.Metadata.ProjectNeutralTypesAttributeTable.ResolveType(ITypeResolver typeResolver, ITypeId typeId) 場所 Microsoft.Expression.DesignModel.Metadata.ProjectNeutralTypesAttributeTable.RegisterDataGridAttributeTable(ITypeResolver typeResolver) 場所 Microsoft.Expression.WpfPlatform.WpfPlatform.RefreshProjectSpecificMetadata(ITypeResolver typeResolver, ITypeMetadataFactory typeMetadataFactory) 場所 Microsoft.Expression.DesignSurface.Project.ProjectContextBase.Initialize() 場所 Microsoft.Expression.DesignSurface.Project.XamlProjectContext.Initialize() 場所 Microsoft.Expression.DesignSurface.Project.ProjectContextManager.GetProjectContext(IHostProject project, IPlatform platform, Boolean create) 場所 Microsoft.Expression.DesignSurface.Project.ProjectContextManager.GetSourceItemContext(IHostSourceItem sourceItem) 場所 Microsoft.Expression.DesignSurface.DesignerService.CreateDesigner(IHostSourceItem item, IHostTextEditor editor, CancellationToken cancelToken) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.RemoteDesignerService.<>c__DisplayClass10.<>c__DisplayClass12. b__f(CancellationToken cancelToken) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.RemoteDesignerService.CallWithCancellation[TResult](IRemoteCancellationToken remoteToken, Func`2 func) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.RemoteDesignerService.<>c__DisplayClass10. b__e() 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.ThreadMarshaler.<>c__DisplayClass16`1. b__15() 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.STAMarshaler.Call.InvokeWorker() System.NotSupportedException Microsoft Silverlight SDK 5.0 は見つかりませんでした。正しいバージョンの Microsoft Silverlight SDK がインストールされていることを確認してください。 Server stack trace: 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.STAMarshaler.WaitForCompletion(NestedCallContext nestedCallContext, BlockingCall call, WaitHandle timeoutSignal) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.STAMarshaler.MarshalIn(Action action, Int32 targetApartmentId) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.ThreadMarshaler.MarshalIn(IRemoteObject targetObject, Action action) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.ThreadMarshaler.MarshalIn[TResult](IRemoteObject targetObject, Func`1 func) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.RemoteWrapper`1.Invoke[T](Func`2 action) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.RemoteHostPlatformService.Microsoft.Expression.DesignHost.IHostPlatformService.GetProperty(String frameworkSpec, String propertyName) 場所 System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs) 場所 System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg) Exception rethrown at [0]: 場所 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) 場所 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) 場所 Microsoft.Expression.DesignHost.IHostPlatformService.GetProperty(String frameworkSpec, String propertyName) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.RemoteHostPlatformService.<>c__DisplayClass1. b__0(IHostPlatformService s) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.RemoteWrapper`1.<>c__DisplayClass4`1. b__3() 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.ThreadMarshaler.<>c__DisplayClass7`2. b__6() 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.STAMarshaler.Call.InvokeWorker() System.NotSupportedException Microsoft Silverlight SDK 5.0 は見つかりませんでした。正しいバージョンの Microsoft Silverlight SDK がインストールされていることを確認してください。 場所 Microsoft.Expression.HostUtility.Platform.SilverlightDomainFactory.get_ReferenceAssembliesPath() 場所 Microsoft.Expression.HostUtility.Platform.HostPlatformService.GetProperty(String frameworkSpec, String propertyName) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.RemoteHostPlatformService.<>c__DisplayClass1. b__0(IHostPlatformService s) 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.RemoteWrapper`1.<>c__DisplayClass4`1. b__3() 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.ThreadMarshaler.<>c__DisplayClass16`1. b__15() 場所 Microsoft.Expression.DesignHost.Isolation.Remoting.STAMarshaler.Call.InvokeWorker()
そういえばこのプロジェクト。PCL (Portable Class Library) を参照していたのでした。でも、Silverlight 5 ではなく、Silverloight 4 を要件に設定しています。
SDK がないというので、とりあえずインストール状況を確認してみます。すると。
マシン A のインストール状況。SDK がある。
マシン B のインストール状況。SDK がない・・・(汗
原因はこれですか。同じようにインストールしていたはずなのに。だれだ、マシン B から SDK Uninstall したのは・・・
いやいや、そもそも PCL を採用したのは、このライブラリはプラットフォーム依存を排除したかったからで。なのに SDK がないとデザイナーが開けなくなるとかアリ? _| ̄|○
そして、PCL を普通のライブラリ(DLL)に作り直して参照設定し直したら、無事デザイナーは例外を吐かなくなりました・・・(汗
ちなみに、設定を変えることで「PCL から普通の DLL にする」といったことは出来ませんでした。(できるのかもしれないけどやり方が分からなかった)
教訓。ランタイムはポータブルでも開発環境はポータブルではない場合がある(追加のSDKをインストールする必要がある)点に注意(大汗