ppt スライドのサムネイルとグラフィック表現を生成する必要があるアプリケーションを作成しています。そのコードはトリッキーに見えません:
pptPresentation = pptApplication.Presentations.Open(ppt, MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoFalse);
var filename = DateTime.Now.Ticks.ToString() + ".png";
var thumbPath = Path.Combine(root, "thumbs") + filename;
foreach(Microsoft.Office.Interop.PowerPoint.Slide slide in pptPresentation.Slides)
{
slide.Export(thumbPath, "png", 160, 120);
}
問題は、プロジェクト内のこのコード (実行することさえできません) では、このコードがアプリケーションの起動時に失敗することです。失敗したコード行に矢印を付けました。
protected void Application_Start()
{
Database.SetInitializer(new DatabaseSeeder());
MibContext ctx = new MibContext();
--> ctx.Database.Initialize(true);
if (!WebSecurity.Initialized)
WebSecurity.InitializeDatabaseConnection("MibContext", "UserProfile", "UserId", "UserName", autoCreateTables: true);
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
}
エラーは恐ろしいものです:オブジェクト参照がオブジェクトのインスタンスに設定されていません。
at System.Data.Metadata.Edm.ObjectItemConventionAssemblyLoader.TryCreateStructuralType(Type type, StructuralType cspaceType, EdmType& newOSpaceType)
at System.Data.Metadata.Edm.ObjectItemConventionAssemblyLoader.TryCreateType(Type type, EdmType cspaceType, EdmType& newOSpaceType)
at System.Data.Metadata.Edm.ObjectItemConventionAssemblyLoader.LoadTypesFromAssembly()
at System.Data.Metadata.Edm.ObjectItemAssemblyLoader.Load()
at System.Data.Metadata.Edm.AssemblyCache.LoadAssembly(Assembly assembly, Boolean loadReferencedAssemblies, ObjectItemLoadingSessionData loadingData)
at System.Data.Metadata.Edm.AssemblyCache.LoadAssembly(Assembly assembly, Boolean loadReferencedAssemblies, KnownAssembliesSet knownAssemblies, EdmItemCollection edmItemCollection, Action`1 logLoadMessage, Object& loaderCookie, Dictionary`2& typesInLoading, List`1& errors)
at System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyFromCache(ObjectItemCollection objectItemCollection, Assembly assembly, Boolean loadReferencedAssemblies, EdmItemCollection edmItemCollection, Action`1 logLoadMessage)
at System.Data.Metadata.Edm.MetadataWorkspace.LoadFromAssembly(Assembly assembly, Action`1 logLoadMessage)
at System.Data.Metadata.Edm.MetadataWorkspace.LoadFromAssembly(Assembly assembly)
at System.Data.Entity.Infrastructure.DbCompiledModel.CreateObjectContext[TContext](DbConnection existingConnection)
at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
at System.Data.Entity.Internal.LazyInternalContext.MarkDatabaseInitialized()
at System.Data.Entity.Database.Initialize(Boolean force)
at Mib.MvcApplication.Application_Start() in c:\Projects\MiB\MiB\Mib\Global.asax.cs:line 25
foreach セクションをコメントアウトすると (問題の原因となっているのは foreach 行です)、アプリケーションは期待どおりに実行されます。
pptPresentation.Slides[0]
も失敗します。
奇妙なことに、失敗は AppStart セクションで発生するため、これに到達していません。これらの間のリンクが何であるか、またはこれを解決するためにどこから始めればよいかさえわかりません。