MVC-3-converted-to-4 앱에 대한 System.Web.Optimization에 대한 참조를 추가하는 방법


458

최근에 MVC 3에서 MVC 4 베타로 변환 한 프로젝트에서 새로운 번들링 기능을 사용하려고합니다. global.asax에는 한 줄의 코드 BundleTable.Bundles.RegisterTemplateBundles();가 필요 using System.Web.Optimization;하며 맨 위에 필요합니다 .

이렇게하면 "조립품 참조가 누락 되었습니까?"라는 빨간색 구불 구불 한 선이 나타납니다. 참조를 추가하고 대화 상자에서 .NET 탭을 클릭하고 AZ에서 정렬하면 보이지 않습니다 System.Web.Optimization.

이 참조를 내 프로젝트에 어떻게 추가합니까?


6
이미 최적화가 있었지만 Opti를 제거한 후 다시 설치 한 후에 만 ​​해결할 수있는 ScriptBundle에 문제가 발생했습니다.
— Myzifer

1
@Myzifer 답변으로 의견을 제출해야합니다. System.Web.Optimization노드를 내 참조로 다시 가져 오는 것이 유일한 방법이었습니다 .
— Snekse

2
@myzifer이 이상한 행동에 대한 답은 정답입니다. 나를 위해이 문제를 해결할 수 있는 유일한 방법은 nuget cmd 줄을 실행하는 것입니다 : UnInstall-Package Microsoft.AspNet.Web.Optimization 및 설치 실행 직후 : Install-Package Microsoft.AspNet.Web.Optimization. VStudio 2013이 설치된 가정용 컴퓨터에서 몇 주 동안 작동하도록 시도했지만 결코 얻을 수 없었습니다. 매우 감사합니다.
— raddevus

@Myzifer-나를 위해 일했습니다-VSOnline에서 프로젝트를 "체크 아웃"하고이 오류가 발생했습니다-제거 후 다시 설치-20 초 작업-감사합니다-이것은 하루를 쉽게 잃을 수있는 바보 같은 문제 중 하나입니다!
— 퍼시

답변:


728

업데이트
버전 1.1.x를 사용할 수 있습니다. 릴리스 정보를 읽으십시오 : https://www.nuget.org/packages/Microsoft.AspNet.Web.Optimization


Microsoft.Web.Optimization 패키지는 이제 더 이상 사용되지 않습니다. ASP.NET (MVC) 4 이상에서는 Microsoft ASP.NET 웹 최적화 프레임 워크를 설치해야합니다.

  • nuget 에서 패키지를 설치하십시오 .

    Install-Package Microsoft.AspNet.Web.Optimization
  • App_Start \ BundleConfig.cs에서 번들을 만들고 구성하십시오.

    public class BundleConfig
    {
        public static void RegisterBundles(BundleCollection bundles) {
            bundles.Add(new ScriptBundle("~/Scripts/jquery").Include(
                "~/Scripts/Lib/jquery/jquery-{version}.js",
                "~/Scripts/Lib/jquery/jquery.*",
                "~/Scripts/Lib/jquery/jquery-ui-{version}.js")
            );
    
            bundles.Add(new ScriptBundle("~/Scripts/knockout").Include(
                 "~/Scripts/Lib/knockout/knockout-{version}.js",
                 "~/Scripts/Lib/knockout/knockout-deferred-updates.js")
            );
        }
    }
  • global.asax.cs의 Application_Start ()에서 RegisterBundles () 함수를 호출하십시오.

    using System.Web.Optimization;
    
    protected void Application_Start() {
         ...
         BundleConfig.RegisterBundles(BundleTable.Bundles);
         ...
    }
  • view.cshtml에 Optimization 네임 스페이스를 포함하고 번들을 렌더링하십시오.

    @using System.Web.Optimization
    
    @Scripts.Render("~/Scripts/jquery")
    @Scripts.Render("~/Scripts/knockout")

자세한 내용은 http://www.asp.net/mvc/overview/performance/bundling-and-minification 을 참조하십시오.


2
이것을 사용하려면 MVC4가 필요합니까?
— FloatLeft 2016 년

5
오래되지 않았습니다. 이것이 Visual Studio 2012 및 ASP.NET (MVC) 4의 최종 릴리스에서 사용하는 방법입니다.
— mhu

29
귀하의 답변에는 "using System.Web.Optimization;"이 포함되며, 이는 바로 질문자가 묻는 것입니다.
— davidpriceev

9
@ dave : 좋은가요 나쁜가요? "결측 어셈블리 참조 누락"을 해결하려면 답변에서 언급 한대로 Microsoft.AspNet.Web.Optimization을 설치해야합니다.
— mhu

6
기본 MVC 템플릿에서 페이지 상단에 System.Web.Optimization 네임 스페이스를 추가하지 않고도 Scripts 클래스를 사용할 수 있습니다. 그러나 내 프로젝트에서 "이름 스크립트가 없습니다"라는 오류가 발생합니다. 어떻게 해결할 수 있습니까? web.config에이 네임 스페이스를 추가해도 도움이되지 않았습니다. 편집 : 솔루션을 다시로드 도움, 죄송합니다 :)
— Wachburn

83

최종 릴리스 버전의 ASP.Net MVC 4에서 접근 방식은 다음과 같습니다.

  • nuget을 통해 Microsoft.AspNet.Web.Optimization을 설치하십시오 (프레임 워크에 의해 설치되지 않으므로).

    install-package Microsoft.AspNet.Web.Optimization
  • Global.asax Application_Start에서 번들을 작성하십시오.

    var scripts = new ScriptBundle("~/MyBundle");
    scripts.IncludeDirectory("~/Scripts/MyDirectory", "*.js");
    BundleTable.Bundles.Add(scripts);
  • "Views"web.config에 "System.Web.Optimization"네임 스페이스를 추가하십시오.

     <pages pageBaseType="System.Web.Mvc.WebViewPage">
        <namespaces>
            <add namespace="System.Web.Optimization" />
        </namespaces>
    </pages>
  • view.cshtml에서 마지막 단계에서 작성된 번들에 포함을 추가하십시오.

    @Scripts.Render("~/MyBundle")

디버그 모드에서 디렉토리의 모든 스크립트 파일은 개별적으로 렌더링됩니다. 릴리스 모드에서는 번들로 제공되고 축소됩니다.


맞습니다.이 버전에 포함되어 있습니다. 다른 버전은 그렇지 않습니다.
— Luke Belbina

1
왜 이것이 효과가 없는지 이해할 수 없습니다. 이 방법과 BundleConfig.cs에 번들을 만들려고 시도했지만 @ Styles.Render ( "~ / CssBundle")를 추가하면 <link href = "/ CssBundle"rel = "stylesheet "/> 저에게 404를줍니다. 왜 그런지 아십니까?
— vsdev

@vsdev 나는 이것이 4 년이 너무 늦다는 것을 알고 있지만 BundleConfig.cs를 확인하여 올바르게 추가했는지 확인해야 할 수도 있습니다.이 답변의 줄은 ".js"파일을 참조 하는 것입니다. 내부에서 public static void RegisterBundles(BundleCollection bundles) { ... }비슷한 작업을 수행 할 수 있어야하며 폴더의 bundles.Add(new StyleBundle("~/CssBundle"));모든 CSS 파일을 가져옵니다 CssBundle. ScriptBundleCSS 파일의 예 에서처럼 원하지 않습니다 .
— vapcguy

17

nuget에서 패키지를 업데이트 (다시 설치)하면 다음 명령을 사용할 수 있습니다.

update-Package Microsoft.AspNet.Web.Optimization -reinstall


14

내 경우에는 tfs가 바이너리를 제외하기 때문에 tfs 문제였습니다. 너겟 PM은 너깃이 설치된 것을 찾은 다음 비슷한 문제가있는 경우 라이브러리를 업데이트하지 마십시오.

  • 소스 제어로 이동
  • .. \ packages \ Microsoft.Web.Optimization으로 이동하십시오.
  • lib 폴더 추가 (이진 확장 제외 제외)
  • 솔루션을 업데이트하고 경로에서 dll 참조를 추가하십시오.

NB : 패키지 폴더는 yousolution.sln 파일과 같은 레벨에 있습니다


11

다음과 같이 패키지 관리자 콘솔에서 nuget을 사용하여 System.Web.Optimization을 설치 제거하십시오.

제거 패키지 Microsoft.AspNet.Web.Optimization

그런 다음 다음을 사용하여 다시 설치하십시오.

설치 패키지 Microsoft.AspNet.Web.Optimization

이 문제를 해결할 수 있습니다.


1
이것이 어떻게 질문에 대답하는지 확실하지 않습니까?
— TylerD87

@ TylerD87 간단한 특정 상황을 해결하고 이것이 사실이라고 생각한 유일한 사람은 아닙니다. 질문에 대한 의견을 읽으면 Snekse가 4 월 29 일 14시 14 분 39 초에 그들은 내가 준 구체적인 지시를 따라야했고, 다른 사람의 밑에는 훨씬 나중에 같은 내용을 게시하고 공언했습니다.
— Myzifer

아마도 답변처럼 보이도록 답변을 편집 하시겠습니까? 나는 당신이 그 질문에 대답하고 있거나 당신이 제안한 것을 깨닫지 못했습니다.
— TylerD87

@ TylerD87 질문은 최적화에 관한 것이었고 내 대답은 최적화에 관한 것이 었습니다. 문제에 자세히 설명 된 문제를 해결하고 적어도 2 명의 다른 사람들이 인정했습니다. 내 대답을 어떻게 잘못 이해했는지와 어떻게 가장 잘하는지에 대한 세부 정보를 제공한다면 더 많은 청중에게보다 명확한 답변을 제공하도록 변경 / 수정할 수 있습니다. 그런 다음 기꺼이 그러한 변화를 기뻐하지만 건설적인 비판 없이는 어떻게 개선 할 수 있는지 결정할 수 없습니다.
— Myzifer

안녕하세요, 내가 말하는 것을 더 명확하게하는 편집을 제안했습니다. 상단의 주석을 읽은 결과 이것이 실제로 제안 된 것이지만 답변이 제시 된 방식은 실제로 제안 한 내용에 대해 명확하지 않은 것으로 보입니다.
— TylerD87

6

Visual Studio를 통해 NUGet 에서 설치 Visual Studio 2010을 열고 도구-> 라이브러리 패키지 관리자-> 패키지 관리자 콘솔을 선택하십시오.

이것은 conslve를 열고 붙여 넣을 것입니다

Install-Package Microsoft.AspNet.Web.Optimization 

입력하십시오. 그리고 당신은 끝났습니다


2

Global.asax application_start에서 설정 (릴리스 모드 등) :

BundleTable.EnableOptimizations = **true**;

DEBUG 모드 에서 축소를 활성화하고 false로 변경하여 모든 스크립트 및 스타일 파일을 개별적으로 렌더링합니다.


5
web.config를 통해이를 쉽게 제어 할 수 있습니다. 경우 <compilation debug="true" />(디버그 버전을 구축 할 때 꽤 표준 인) 설정, 더 최적화가 수행되지 않습니다. 일반적으로이 설정은 릴리스 빌드에서 자동으로 제거됩니다. BundleTable.EnableOptimizationsweb.config를 재정의하는 데만 사용해야합니다. 자세한 정보 : asp.net/mvc/tutorials/mvc-4/ 번들링 및 축소 ( "번들링 및
— 축소

이것은 매우 도움이되었습니다. 감사합니다. dotless + RequestReduce로 작업하면 번들이 엉망이되어서 사용하지 않도록 설정해야했습니다.
— siva.k

이 설정은 번들에서 사전 축소 된 파일을 사용 중인지 또는 축소되지 않은 파일을 사용 중인지에 따라 달라집니다. 각 모드에 대한 모범 사례를 제외하고 디버그 또는 릴리스에있는 경우에는 그다지 많지 않습니다 (예 : ex). , 디버그 모드에서 컴파일하는 프로젝트를 가질 수 있지만 BundleTable.EnableOptimizations = false;BundleConfig.cs에서 모든 사전 축소 파일을 지정하고 다른 최소화를 원하지 않는 프로젝트가있을 수 있습니다.
— vapcguy

BundleConfig.cs에서 사전에 최소화되지 않은 파일 (예 : .min이없는 파일)을 사용하는 경우 누군가의 문제에 대한 답변 일뿐입니다. .min 파일을 사용하여 true로 설정하면 문제가 발생합니다.
— vapcguy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.