2017-12-09 16 views
1

ASP.NET Core MVC가 나오기 전에 RazorGenerator를 사용하여 뷰를 어셈블리로 컴파일하고, 파일 시스템 대신 어셈블리에서 뷰를로드하는 사용자 지정 ViewEngine을 도입하여 다른 프로젝트에서 이러한 뷰를 다시 사용했습니다. ASP.NET 코어 MVC에서ASP.NET Core MVC에서 뷰 (페이지)를 재사용하는 방법은 무엇입니까?

미리 컴파일 된 뷰의 개념이 있으며 버전 2.0 상자 밖으로 작동 규칙에 의해 의 이름 project_name.PrecompiledViews.dll을 가지고 어셈블리를 생성합니다.

나는 Google에서 답변을 찾을 수 없지만 두 가지 문제가 있습니다. 먼저 다른 프로젝트에서 DLL을 재사용하는 방법을 모르겠습니다. About.cshtml 페이지가 CompanyBase.dll 인 경우와 마찬가지로 해당 페이지 /보기를 ProjectAlpha에서 재사용 할 수 있습니까?

또한 게시 할 때보기 편집을 원하지 않습니다. 빌드시 변경하려면 어떻게해야합니까?

답변

3

ASP.NET 코어의 Application Parts 개념이있다 :

응용 사례 일부는 컨트롤러, 뷰 컴포넌트, 또는 태그 도우미 같은 MVC 기능을 발견 할 수있는 응용 프로그램의 리소스를 통해 추상화는 .

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

다음 응용 프로그램의 일환으로 어셈블리를 추가하고보기 검색에 대한 ViewComponentFeatureProvider 등록 :

는 DLL에 포함 된 리소스와 같은 뷰를 포함하는 (전망 라이브러리에 대한) .csproj에 다음을 추가합니다 :

// 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

안녕하세요, @Set,이 오류가 발생했습니다. 2 주 동안이 문제를 해결할 수 없었습니다. * 'Holism.Framework'패키지의 컴파일 라이브러리 위치를 찾을 수 없습니다. * –

+0

또한 임베디드 리소스를 DLL? DLL 패키지 내부를보기 위해'ildasm'을 사용하고 있지만, 코드 만 볼 수 있으며 리소스를 볼 수 없습니다. –

+0

음, [이 GitHub 코멘트] (https://github.com/dotnet/core-setup/issues/2981#issuecomment-344634761)에 따르면 나는'Microsoft.AspNetCore.All'을 버전 2.0.3으로 변경했으며 적어도 나는 그 오류가 더 이상 없다. 이제'cshtml 레이아웃을 찾을 수 없습니다. '라는 오류가 있습니다. –