public RuntimeContentViewModel(Asset asset)
            : base(new Messenger())
        {
            if (asset == null) throw new ArgumentNullException("asset");

            Asset = asset;
            ContentType = RuntimeContentTypeManager.Instance.ResolveRuntimeContentType(asset);
        }
        public Type ResolveRuntimeContentType(Asset asset)
        {
            if (asset == null) throw new ArgumentNullException("asset");

            // プロセッサを使用しないアセットの実行時コンテンツ型はビルド前コンテンツ型です。
            if (asset.Processor == null)
            {
                // TODO: Importer から解決できるようにしないとダメ。
                return ContentTypeResolverManager.Instance.ResolveContentType(asset.File);
            }

            var processorInfo = asset.Project.ProcessorInfoRegistry.GetProcessorInfo(asset.Processor);
            if (processorInfo == null)
            {
                Tracer.TraceSource.TraceEvent(TraceEventType.Warning, 0, "ContentProcessor '{0}' not found.", asset.Processor);
                return null;
            }

            var processor = processorInfo.CreateInstance();
            var outputType = processor.OutputType;

            // XNA 標準ビルド後コンテンツ型から実行時コンテンツ型を解決します。
            var runtimeType = ResolveStandardRuntimeContentType(outputType);
            if (runtimeType != null)
            {
                return runtimeType;
            }

            // ContentSerializerRuntimeTypeAttribute の指定から実行時コンテンツ型を解決します。
            runtimeType = ResolveCustomRuntimeContentType(outputType);
            if (runtimeType != null)
            {
                return runtimeType;
            }

            // それ以外の場合はビルド後コンテンツ型が実行時コンテンツ型です。
            return outputType;
        }