2016-09-09 2 views
1

코어 코어 프로젝트에 추가 할 수있는 NuGet 패키지로 게시하고 싶은 ASP.NET 코어 앱을 만들고 있습니다. 앱은 컨트롤러, 뷰, 서비스 클래스, 모델, 뷰 등을 포함하여 프로젝트의 일부 영역 (즉,/Areas/MyArea)에 실제로 한정되어 있습니다 (몇 개 제외). 정말,이는 내가 마술 기존 웹 응용 프로그램에 추가 할 싶어요 조각입니다ASP.NET 코어 앱 영역을 NuGet 패키지로 패키지화하는 방법이 있습니까?

  • 지역과 모든에
  • wwwroot에/lib 디렉토리/MyApp를
  • 항목에있는 그것의 CSS와 JS 루트

에서 시작 클래스

  • MyApp.json 나는 NuGet 패키지 종속성을 복원 알고 있지만, 나는 그것이 또한 클라이언트 측 패키지를 고려할 것입니다 방법을 모르겠어요.

    제안 사항? NuGet이 이것을위한 잘못된 도구입니까?

  • 답변

    1

    현재 웹 앱에 Nuget 패키지에서 파일을 전송할 수 없습니다. 앞으로도 가능해질 수 있도록 토론과 노력이 필요하다고 생각합니다.

    내 프로젝트에 project.json에서 다음과 같이 수행의 의견이며 필요한 정적 JS 및 CSS 자원을 포함하는 것입니다 처리하고있어 방법 :

    "buildOptions을": { "삽입을" 그런 다음

    public class cscsrController : Controller 
    { 
        private ContentResult GetContentResult(string resourceName, string contentType) 
        { 
         var assembly = typeof(cscsrController).GetTypeInfo().Assembly; 
         var resourceStream = assembly.GetManifestResourceStream(resourceName); 
         string payload; 
         using (var reader = new StreamReader(resourceStream, Encoding.UTF8)) 
         { 
          payload = reader.ReadToEnd(); 
         } 
    
         return new ContentResult 
         { 
          ContentType = contentType, 
          Content = payload, 
          StatusCode = 200 
         }; 
        } 
    
        [HttpGet] 
        [AllowAnonymous] 
        public ContentResult bootstrapdatetimepickercss() 
        { 
         return GetContentResult(
          "cloudscribe.Core.Web.css.bootstrap-datetimepicker.min.css", 
          "text/css"); 
        } 
    
        [HttpGet] 
        [AllowAnonymous] 
        public ContentResult momentwithlocalesjs() 
        { 
         return GetContentResult(
          "cloudscribe.Core.Web.js.moment-with-locales.min.js", 
          "text/javascript"); 
        } 
    
    } 
    

    I 컨트롤러 동작을 링크

    [ "조회/ ", "JS는/"는 "CSS는/**은"] }

    는 I는 controller to serve my static resources 만든 뷰에서 js 및/또는 css를로드해야합니다.

    public static RazorViewEngineOptions AddEmbeddedViewsForCloudscribeCore(this RazorViewEngineOptions options) 
    { 
        options.FileProviders.Add(new EmbeddedFileProvider(
          typeof(SiteManager).GetTypeInfo().Assembly, 
          "cloudscribe.Core.Web" 
         )); 
    
        return options; 
    } 
    

    이이 같은 웹 응용 프로그램 Startup에 ConfigureServices에서 호출해야합니다 :

    가 포함 된 뷰 내가 RazorViewEngineOptions의 확장 방법을 만들어 작동하게하려면

    services.AddMvc() 
        .AddRazorOptions(options => 
        { 
         options.AddEmbeddedViewsForCloudscribeCore(); 
    
        }) 
        ; 
    

    이 기술한다 지역마다 똑같이 일해야한다. 한 가지 멋진 점은 사용자가보기를 다운로드하여 로컬에 설치하면 포함 된보기의 사용을 무시하므로 일부 또는 모든보기를 쉽게 사용자 정의 할 수 있다는 것입니다. 뷰를 오버라이드하면 원하는 경우 js 및 css를 수동으로 로컬에 설치하고 사용자 정의가 필요할 경우 뷰를 변경하여 해당 로컬 파일에 연결할 수도 있습니다. 최종 결과는 내 너겟이 필요한 모든 것을 갖추고 있으므로 일을 시작하기위한 몇 가지 시작 구성이 있습니다.

    +0

    파일을 추가 할 수 없다는 것이 확실하지 않습니다. DI 컨테이너 라이브러리 중 일부 (예 : StructureMap MVC), PowerShell 스크립트를 사용하여 상상해보십시오. –

    +0

    실제로 패키지에 파일을 추가 할 수 있지만 현재 .NET 용 앱에 파일을 추가 할 수 없습니다. core nugets afaik https://github.com/NuGet/Home/issues/2262 –

    +0

    powershell이 ​​현재 오픈 소스임을 알고 있습니다. 그리고 플랫폼을 교차시키지 만 확실히 적어도 순간적으로 너겟과 함께 십자가 플랫폼 방식으로 사용할 수 있다면 확실하지 않습니다 –

    관련 문제