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.