8

문제

로컬 디버그에서 특정 페이지로 이동할 때 오류 : CS0012 : 'System.Data.Linq.DataContext'형식이 참조되지 않은 어셈블리에 정의되어 있습니다. 어셈블리 'System.Data.Linq, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089'에 대한 참조를 추가해야합니다.

다음은 오류 메시지의 참조 된 코드 줄입니다.

28 행 :

29 행 :

30 행 : public class _Page_Views_blah_granny_cshtml : System.Web.Mvc.WebViewPage {

31 행 :

32 행 : #line 숨김

다른 모든 페이지는 훌륭하게 작동합니다. 특히 한 페이지에만 액세스 할 때만 발생합니다. 다른 모든 페이지에서도 참조가 작동합니다. 내가 결정할 수있는 한, 이것은 참조에 문제가되지 않습니다.

나는이 문제를 연구하는데 많은 시간을 할애했다.

내가 찾은 모든 대답은 web.config로 이동하여 system.web> configuration> 어셈블리에서 linq에 어셈블리 참조를 배치하는 것이 좋습니다. Mine에는 어셈블리가 나열되어 있지 않으며 이전 버전에서는 더 많이 사용됩니다. 나는 그것을 어떻게해서든지했다. 그것은 나에게 조립품으로 무엇을해야하는지 전혀 모른다는 다른 오류를 보냈다.

system.data.linq을 삭제하고 다시 추가했습니다.

나는 VS와 내 컴퓨터를 재부팅했다.

VS에서 기본적으로 생성되는 내 코드에는 System.Linq이 있습니다.

배경 - 이것이 시작된 방법입니다.

응용 프로그램은 MVC 4, C #입니다.

내 DataContext에서 새 클래스를 만들고, 새 컨트롤러를 추가하고, 강력한 형식의 뷰를 만들었습니다.

매우 유사한 코드가 있습니다 (필요하지는 않지만, 경우에 따라).

두 클래스 :

public class granny { 
            public string data { get; set; }
            public string criteria { get; set; }
}

public List<granny> getGranny() {
    var a = from x in grannytable
            join dx in anothertable
            on x.criteria equals dx.criteria
            select new granny {
                data = x.somenewdata;
            }; 
    return a.ToList();
}

다음은 컨트롤러입니다.

    public ActionResult granny() {
        return View(db.getGranny());
    }

거기에 멋진 아무것도.

이 페이지는 전형적인 면도기 뷰이며, 강력하게 "List"로 입력됩니다 ... 테이블을 반복 작성하여 데이터를 그대로 덤프합니다.

필요에 따라 추가 코드를 제공해 드리게되어 기쁩니다.

나는 web.config를 망치지 않았다. 페이지의 참조를 제거하거나 조정하지 않았습니다. 다른 모든 견해는 놀랍게 작동합니다.

내가 로컬로 실행하고 / 할머니에게 가려고하면 위의 오류가 발생합니다.

당신의 도움을 주셔서 감사합니다!

해결책: 나는 System.Linq (또는 이전 버전의 System.Data.Linq)에서 참조로 이동하고 CopyLocal을 True로 변경했습니다.


  • 구성 파일에서 어셈블리를 잊어 버린 경우 프로젝트에 "정상적인" 참조 세트? (솔루션 탐색기에 References 항목이 있습니까?) - Jon Skeet
  • 확실히 그렇습니다. System.Data.Linq를 참조합니다. 내가 참고 문헌을 삭제하고 무언가가 그곳에 매달려 있다고 생각하면서 덧붙였다. 포함 된 .NET System.Data.Linq을 사용하고 있습니다. C : \ Program Files \ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.0 \ System.Data.Linq.dll을 가리 킵니다. 내 다른 페이지가 linq를 사용하고 있음을 알 수 있습니다. 그것이 거대한 문제가 아니기 때문에 linq 참조 문제라고 생각하지 않습니다. 단지 한 페이지에 불과하기 때문입니다. - shubniggurath
  • 문제를 보여주는 완벽한 솔루션이나 프로젝트를 제공 할 수 있습니까? - Phil
  • 전체 솔루션? 또는 관심있는 특정 파일이나 속성이 있습니까? - shubniggurath
  • @shubniggurath 완벽한 솔루션입니다. 말로 해결할 수있는 해결책은 없습니다. 문제를 보여주는 바로 그 중 하나입니다. - Schandlich

3 답변


24

이것은 나를 위해 일했다 :

  • 웹 프로젝트의 References 노드로 이동합니다.
  • System.Data.Linq에 대한 참조 찾기
  • VS 속성 창을 엽니 다.
  • 속성 창에서 로컬 복사 : False를 True로 변경하십시오.

이 전에는 System.Data.Linq.dll이 bin 디렉토리에 복사되지 않았습니다. (수동으로 bin 디렉토리에 복사해도 오류가 해결됨)


  • 좋은 +1. 이것은 1 년 후에도 여전히 유효합니다. 다른 누구에게나 dbml 데이터 컨텍스트를 사용할 때 Umbraco 7 WebApi 컨트롤러에서이 점을 경험했습니다. Chris가 설명하는대로 지역을 복사하십시오. 건배 - Marc D.
  • 왜이게 효과가 있니? 해야할까요?System.Data.Linq.dll참조 된 경우 항상 사용할 수 있습니까? - Protector one
  • 그것은 아마해야합니다. 이 버그는 Copy Local : False라고 표시되었다고 생각합니다. 어떻게되는지 알지 못합니다. - Chris F Carroll

8

MVC는 즉시보기를 컴파일 할 수 없습니다. 귀하의보기 DataContext에 대한 참조를 포함하는 것 같습니다. web.config에 참조를 추가하면 컴파일러에서 파일을 찾도록 지시해야합니다.

<configuration> 
 <system.web>
  <compilation targetFramework="4.0"> 
    <assemblies> 
      <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> 
   </assemblies> 
</compilation>

참고 : 어셈블리는 컴파일 요소 아래에 추가해야합니다.

보기, 컨트롤러 및 datacontext 코드를 공유 할 수 있습니까?


  • 어셈블리를 MVC 4에 추가 할 필요는 없습니다. - shubniggurath

7

추가하려고 시도하십시오.@using System.Data.Linq문제보기의 맨 위에<add namespace="System.Data.Linq" />으로<pages>당신의 web.config 섹션조회수폴더.

연결된 질문


관련된 질문

최근 질문