0

私はNet Coreをサポートするように更新されていない様々なライブラリに依存しているため、フルネットフレームワークの上で実行する必要があるMVC6 Webサイトを持っています。ASPNETコア/ EFコアアプリケーションNet46の上に

project.jsonファイルを誤って設定している可能性があります。ここに私が持っているものは次のとおりです。

{ 
    "dependencies": { 
    "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0", 
    "Microsoft.AspNetCore.Diagnostics": "1.0.0", 
    "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.0.0", 
    "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0", 
    "Microsoft.AspNetCore.Mvc": "1.0.1", 
    "Microsoft.AspNetCore.Razor.Tools": { 
     "version": "1.0.0-preview2-final", 
     "type": "build" 
    }, 
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0", 
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.1", 
    "Microsoft.AspNetCore.StaticFiles": "1.0.0", 
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.1", 
    "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.1", 
    "Microsoft.EntityFrameworkCore.Tools": { 
     "version": "1.0.0-preview2-final", 
     "type": "build" 
    }, 
    "Microsoft.Extensions.Caching.Memory": "1.0.0", 
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0", 
    "Microsoft.Extensions.Configuration.Json": "1.0.0", 
    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0", 
    "Microsoft.Extensions.Logging": "1.0.0", 
    "Microsoft.Extensions.Logging.Console": "1.0.0", 
    "Microsoft.Extensions.Logging.Debug": "1.0.0", 
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0", 
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0", 
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": { 
     "version": "1.0.0-preview2-final", 
     "type": "build" 
    }, 
    "Microsoft.VisualStudio.Web.CodeGenerators.Mvc": { 
     "version": "1.0.0-preview2-final", 
     "type": "build" 
    }, 
    "Serilog": "2.2.1", 
    "Serilog.Sinks.RollingFile": "3.0.1", 
    "Serilog.Sinks.Literate": "2.0.0", 
    "Serilog.Extensions.Logging": "1.2.0", 
    "AutoMapper": "5.1.1", 
    "WindowsAzure.Storage": "7.2.1", 
    "Microsoft.Azure.WebJobs": "1.1.2", 
    "Microsoft.WindowsAzure.ConfigurationManager": "3.2.1", 
    "UploadFramework": "1.0.0-*", 
    "ConnellDataCore": "1.0.0-*", 
    "ConnellData": "1.0.0-*", 
    "System.IO.Compression": "4.1.0", 
    "BundlerMinifier.Core": "2.2.281" 
}, 

    "tools": { 
    "BundlerMinifier.Core": "2.0.238", 
    "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final", 
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final", 
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final", 
    "Microsoft.Extensions.SecretManager.Tools": "1.0.0-preview2-final", 
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": { 
     "version": "1.0.0-preview2-final", 
     "imports": [ 
     "portable-net45+win8" 
     ] 
    } 
    }, 

    "frameworks": { 
    "net46": { } 
    }, 

    "buildOptions": { 
    "emitEntryPoint": true, 
    "preserveCompilationContext": true 
    }, 

    "runtimeOptions": { 
    "configProperties": { 
     "System.GC.Server": true 
    } 
    }, 

    "publishOptions": { 
    "include": [ 
     "wwwroot", 
     "Views", 
     "Areas/**/Views", 
     "appsettings.json", 
     "web.config" 
    ] 
    }, 

    "scripts": { 
    "prepublish": [ "bower install", "dotnet bundle" ], 
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ] 
    } 
} 

これが依存するすべてのプロジェクトは、Net46の上に構築されています。私はのConfigurationManager(つまり、その問題を解決する正しい方法ではない場合や、アドバイスしてください)にアクセスする必要があるため、この特定の例では、私はframeworkAssembliesエントリーを組み込んだものの

"frameworks": { 
    "net46": { 
     "frameworkAssemblies": { 
     "System.Configuration": "4.0.0.0" 
     } 
    } 
    } 

:ありproject.jsonファイルはすべてのようなエントリを持っています。

これは、ASPNETコア/ EFコアアプリケーションをNet46の上で実行するように設定する正しい方法ですか?そうでない場合は、何を変更する必要がありますか?

追加情報

私はSystem.IO.Compressionアセンブリを伴わに実行している問題。具体的には、私のソリューションは構築されたが、ウェブサイトがZipArchiveにアクセスしようとするたびにクラッシュした。 System.IO.Compression.dllがサイトのbinディレクトリに展開されていないため(興味深いことに、System.IO.Compression.Zip.dll でしたが、System.IO.Compression.dllでは役に立ちません)。

私はSystem.IO.CompressionをWebサイトのbinフォルダに手動でコピーすることでその問題を "解決"しました。しかし、手動でコピーされたDLLは、サイトの公開時にAzureにデプロイされないため、Azureベースのサイトでも同じクラッシュ問題が発生します。

これを解決しようとして、私はさまざまなプロジェクトを掘り下げ、System.IO.Compression DLLのファイルバージョンを確認しました。そして私は奇妙なことを発見しました.System.IO.Compression DLLは、私の補助プロジェクト(ウェブサイトが依存するプロジェクト)に標準のNet4.6キャッシュではなくNetCoreアセンブリキャッシュから配備されています。

私はこれが何を意味するのか分かりません。しかし、私はそれが私が遭遇している問題に関連していると思う。

私の目標は、どういうわけか>> < <プロジェクトがNet Coreのアセンブリを配備しないようにすることです。

残念ながら、私はそれを行う方法がわかりません。私は、この問題には、Net Coreアセンブリを使用することを主張している/ ASPNET Core自体のような、いくつかのリファレンスが関係していると思われる。しかし、私はそれを知らない方法を知らない。

+0

なぜあなたはそれを誤解していると思いますか?何か間違いはありますか?それはうまく構築して公開していますか? (私はそれに何か間違いを見ることはできません、すべての依存関係とフレームワークは適切な場所にあります) –

+0

LOL!私はめったにこのような設定の質問を投稿しないので、どの行のコードでエラーが発生したかを示す習慣は、問題が特定のコード行に関連していないためです。 Thanxはフィードバックのために、私はより多くの文脈を提供するために私の質問を編集しました。 –

+0

がお手伝いします:https://blogs.msdn.microsoft.com/cesardelatorre/2016/06/28/running-net-core-apps-on-multiple-frameworks-and-what-the-target-framework -monikers-tfms-are-about / – Sampath

答えて

0

dllがコピーされていないことは.net coreとは関係ありません。問題が何であるか分かりません。コードに直接参照がないため、dllはコピーされません。 System.IO.Compression.Zip.dllは、コードのどこかでオブジェクトをインスタンス化しているか、そのDLLから静的メソッドを呼び出すためにコピーされます。

エンティティフレームワーク6が出荷されたときに、SqlServerプロバイダが個別のdllに移動し、コード内で直接参照を取得していなかったため、展開されませんでした。

ロブ・ラングは、彼のadventuresと最終的なソリューションで興味深いの読み取りがあります。地元のレポートを使用してアプリケーションを配備するとき、私はまたのSQLServerデータ型のdllのすべてをまねた問題を見てきました

var ensureDLLIsCopied = System.Data.Entity.SqlServer.SqlProviderServices.Instance; 

、そこに私が取りました別のアプローチで、dllをWebプロジェクトで直接参照していました(非常に多くありました)。そして、それらをすべてローカルにコピーするように設定しました。私は、dllが公開されているプロジェクトでrefrerencedされている限り、出力フォルダですが、公開/デプロイされているプロジェクトによって参照されるクラスライブラリによって参照されている場合は、それらは参照されません。