2017-12-09 36 views
1

、我々はアセンブリにビューをコンパイルするRazorGeneratorを使用して、我々は、アセンブリの代わりに、ファイル・システムからビューをロードするカスタムViewEngineを導入することで、他のプロジェクトでこれらのビューを再利用します。 ASP.NET MVCのコアでASP.NET Core MVCでビュー(ページ)を再利用するには? ASP.NETコアMVC前

、プリコンパイルされたビューのこの概念であり、それは、バージョン2.0のための箱から出して動作し、慣例によりproject_name.PrecompiledViews.dllの名前を持つアセンブリを作成します。

私はGoogleでのための答えを見つけることができないけれども私は2つの問題を抱えています。 まず、別のプロジェクトでそのDLLを再利用する方法がわかりません。私はCompanyBase.dllAbout.cshtmlページを持っている場合と同様に、どのように私はProjectAlphaでそのページ/ビューを再利用することができますか?

そしてまた、私は、ビューのコンパイルが公開で発生する必要はありません。ビルド時にそれを変更するにはどうすればよいですか?

答えて

3

ASP.NETコアでApplication Parts概念があります:

アンアプリケーション部は、コントローラ、ビューコンポーネント、またはタグヘルパーのようなMVC機能は発見することができる、そこからアプリケーションのリソースを抽象化、であるが、 。

DLLに埋め込まれたリソースとしてビューを含めるように(ビューのライブラリ用).csprojに以下を追加します。

<ItemGroup> 
    <EmbeddedResource Include="Views\**\*.cshtml" /> 
</ItemGroup> 

は、アプリケーションの一部としてアセンブリを追加し、ビューの発見のためのViewComponentFeatureProviderを登録します。

// using System.Reflection; 
// using Microsoft.AspNetCore.Mvc.ApplicationParts; 
// using Microsoft.AspNetCore.Mvc.ViewComponents; 

public void ConfigureServices(IServiceCollection services) 
{ 
    ... 
    var assembly = typeof(ClassInYourLibrary).GetTypeInfo().Assembly; 
    var part = new AssemblyPart(assembly); 

    services.AddMvc() 
      .ConfigureApplicationPartManager(p => { 
       p.ApplicationParts.Add(part); 
       p.FeatureProviders.Add(new ViewComponentFeatureProvider()); 
      }); 
} 

もう一つの方法は、EmbeddedFileProviderを使用することです。このアプローチはthis SO answerに記載されています。

+0

このエラーが発生しました。この問題は2週間は解決できませんでした。* 'Holism.Framework'パッケージのコンパイルライブラリの場所が見つかりません* –

+0

埋め込みリソースの表示方法DLL?私は 'ildasm'を使ってDLLパッケージを見ていますが、私が見るのはコードだからリソースが見えません。 –

+0

さて、[このGitHubのコメント](https://github.com/dotnet/core-setup/issues/2981#issuecomment-344634761)によると、私は2.0.3' 'バージョンに' Microsoft.AspNetCore.All'を変更し、少なくとも私はそのエラーはもうありません。今私は 'cshtmlのレイアウトが見つかりません 'というエラーがあります。 –