빌드 오류 : System.Runtime에 대한 참조를 추가해야합니다


209

새로운 ASP.NET MVC 5.1 솔루션을 준비 중입니다. NuGet 패키지를 추가하고 Zurb Foundation 등으로 설정하고 있습니다.

그것의 일부로, 휴대용 클래스 라이브러리 인 사내 NuGet 패키지에 대한 참조를 추가했으며 이것이 빌드 서버에서 문제를 일으키는 것으로 생각합니다.

TeamCity는 다음과 같이 빌드에 실패합니다.

'System.Object'유형이 참조되지 않은 어셈블리에 정의되어 있습니다. 어셈블리 'System.Runtime, Version = 4.0.0.0에 대한 참조를 추가해야합니다.

원래 Razor 웹 페이지를 컴파일 할 때 동일하거나 유사한 오류에 대한 수정 프로그램을 추가했습니다. web.config

<compilation ... >
  <assemblies>
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </assemblies>
</compilation>

그러나 문제는 해결되지 않았습니다.

답변:


216

수정 사항을 구현하려면 먼저 기본적으로 다음과 같은 기존 web.config 컴파일 섹션을 펼치십시오.

<compilation debug="true" targetFramework="4.5"/>

일단 확장되면 지시에 따라 다음과 같은 새로운 구성 XML을 추가했습니다.

  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>

최종 web.config 태그는 다음과 같아야합니다.

<compilation debug="true" targetFramework="4.5">
  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>
</compilation>

2
이 문제는 알려진 PCL은 아니지만 많은 nuGet 패키지 인 4.52를 대상으로하는 MVC 프로젝트에 영향을 미쳤습니다. VS2013을 제거하면이 문제가 발생했다고 생각하지만 사실은 알 수 없습니다. X-PagedList를 참조한 뷰에서만 오류가 발생했습니다. 프로젝트 web.config (views web.config 아님)에 대한 참조를 추가하여 수정했습니다.
Greg Terrell

1
@GregTerrell 이전 버전의 X.PagedList에서 업그레이드 한 후이 정확한 문제가 발생했습니다. 너무 실망. 참조를 추가하면 .vs프로젝트를 닫은 후 폴더를 삭제 (이름 바꾸기)하고 다시 열어 web.config항목을 제거하고 빌드하고 정상적으로 실행합니다.
Mardoxx

@Mardoxx 나는 같은 문제가 발생했습니다. VS 또는 X.PagedList에 문제가 있습니까? VS 버그 인 경우 web.config를 패치 할 수 있지만 X.PagedList에 문제가있는 경우 .config 파일을 변경하고 싶지 않습니다.
Jecoms

@Jecoms 나는 당신의 GitHub의 문제 :)에 대답 github.com/kpi-ua/X.PagedList/issues/49#issuecomment-243515362
Mardoxx

3
.Net 4.5.1 프로젝트에 MoreLINQ를 설치 한 후이 오류가 발생했습니다. 이 답변은 그것을 해결했습니다.
Chris Moschini

125

이 System.Runtime.dll 어셈블리에 대한 참조를 추가하면 문제가 해결되었습니다.

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades\System.Runtime.dll

명시 적 경로의 해당 파일이 빌드 서버에 존재하지 않지만

PCL 및이 Facades에 대한 문서를 찾은 후 추가 정보를 게시하겠습니다.

최신 정보

인터넷 전체의 외관 어셈블리에는 거의 아무것도 없습니다.

구글 :

(Facades OR Facade) Portable Library site:microsoft.com

2
당신이 지정된 폴더에있는 DLL 파일을 찾을 수없는 경우 설명 된 바와 같이, 당신은 윈도우 SDK를 설치할 수 있습니다 stackoverflow.com/a/14517992/3918598
user3918598

감사. 4.5.1 SDK 설치 후 위의 링크가 작동했습니다.
Matt Beckman

40
이 문제 를 다루는 Microsoft 지원 에 대한 기술 자료 문서가 있습니다.
피터 Majeed

1
@PeterMajeed 당신은 실제로 그 의견을 여기에 답으로 게시해야합니다. 팁 주셔서 대단히 감사합니다!
julealgon

3
작동 시키려면 '로컬 복사'를 true로 설정해야합니다
Phate01

28

나를 위해 일한 유일한 방법. web.config에 어셈블리 추가

<compilation debug="true" targetFramework="4.5">
  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>
</compilation>

1
감사합니다 Lorena! 나를 위해 일했다
Annia Martinez

한 줄짜리 작업, 라이브러리 경로에 의존하지 않으며 아무것도 설치할 필요가 없습니다.)
Ivan Zverev

이 답변은 @Baahubali의 최고 투표 답변과 동일합니다
Jesper Mygind

27

허용 된 답변에 @PeterMajeed의 의견이 관련 문제를 해결하는 데 도움이되었습니다. 휴대용 라이브러리를 사용하지 않지만 TeamCity를 실행하는 새로운 Windows Server 2012 설치에서 동일한 빌드 오류가 있습니다.

설치 중 의 Microsoft .NET Framework 4.5.1 개발자 팩 (별도로 설치 한 후 문제를 처리했다 MS 빌드 도구 ).


5
어떤 아이디어가 4.6과 관련이 있습니까? 개발자 팩이 보이지 않습니다.
georgiosd

4
4.5.1 및 4.5.2 dev 팩이 모두 있는데이 오류가 계속 발생합니다. 아이디어? 25 개 프로젝트 모두에서 참조하고 싶지 않습니다. 어떤 이유로 다른 25는 그것을 요구하지 않습니다.
abatishchev

좋은 질문-적어도 빌드 자동화 관점에서 4.5.2 또는 4.6을 다루지 않았습니다.
sfuqua

당신이 정말로 붙어 있다면 항상 무료 Visual Studio Community Service Edition을 팝업하여 최신 상태로 유지할 수 있습니다.
Luke Puplett

이러한 개발자 팩을 설치해야하는 이유를 모르겠습니다. VS2013 Pro를 설치했습니다. 충분하지 않습니까? 그러나 여기서 문제가 해결되었습니다. 감사.
Mike de Klerk 2016 년

10

VS 2015 (MVC는 아님)의 일부 솔루션 및 한 워크 스테이션의 동일한 솔루션이지만 다른 워크 스테이션에서는이 문제가 발생했습니다. .NET 버전을 4.6으로 변경하고 PCL을 참조하면 오류가 나타납니다.

해결책은 간단합니다. 솔루션을 닫고 솔루션과 동일한 폴더에서 숨겨진 .vs 폴더삭제하십시오 .

다른 답변에서 제안한대로 누락 된 참조를 추가하면 문제가 해결되지만 참조를 다시 제거한 후에도 오류가 해결 된 상태로 유지됩니다.

TeamCity는 구성에 문제가 없었기 때문에 말할 수 없습니다. 그러나 디버깅 작업의 일부로 작업 카탈로그를 재설정해야합니다.


6

그것은 오래된 문제이지만 지속적인 통합 서버에서 빌드 파이프 라인을 수정하기 위해 오늘 직면했습니다. 첨가

<Reference Include="System.Runtime" />

.csproj파일에 문제가 해결되었습니다.

약간의 맥락 : 관심있는 프로젝트는 개발 시스템에서 빌드 문제없이 완전한 .Net 프레임 워크 4.6.1 프로젝트입니다. 우리가 제어 할 수없는 빌드 서버에만 문제가 나타납니다. SDK 버전이 다르거 나 비슷한 것이 원인 일 수 있습니다.

Visual Studio에서 제안 된 참조를 추가 <Reference하면 누락 된 참조 경고 (참조 트리의 추가 된 항목에있는 노란색 삼각형) 의 가격으로 빌드 오류가 해결 되었습니다 .

나는 이것이 비슷한 시나리오의 사람들을 도울 수 있기를 바랍니다 ...


비슷한 맥락에서 나를 위해 해결
Nicola Celiento

3

.NET 런타임과 대상 .NET 버전의 대상 팩을 설치하십시오.

개발자 팩은이 두 가지가 함께 번들로 제공되지만 현재로서는 4.6 버전이 아닌 것이므로 두 항목을 별도로 설치해야합니다.

다운로드는 여기에서 찾을 수 있습니다 : http://blogs.msdn.com/b/dotnet/p/dotnet_sdks.aspx#


3

또한 오류없이 컴파일되었지만 코드베이스를 약간 업데이트 한 후에 ASP .NET MVC 프로젝트를 실행하려고 시도 하면서이 문제에 직면했습니다.

컴파일러 오류 메시지 : CS0012 : 'System.Object'형식이 참조되지 않은 어셈블리에 정의되어 있습니다. 어셈블리 'System.Runtime, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'에 대한 참조를 추가해야합니다.

우리 프로젝트는 결코이 문제에 부딪치지 않았으므로 근본 원인을 찾기 전에 구성 파일을 변경하는 것에 회의적이었습니다. 오류 로그에서 실제로 발생한 일을 지적한이 상세한 컴파일러 출력을 찾을 수있었습니다.

경고 CS1685 : 미리 정의 된 형식 'System.Runtime.CompilerServices.ExtensionAttribute'가 전역 별칭의 여러 어셈블리에 정의되어 있습니다. 'c : \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ mscorlib.dll'의 정의 사용

c : \ Users \ Admin \ Software Development \ source-control \ Binaries \ Publish \ WebApp \ Views \ Account \ Index.cshtml (35,20) : 오류 CS0012 : 'System.Object'형식이 다음 어셈블리에 정의되어 있습니다. 참조되지 않았습니다. 어셈블리 'System.Runtime, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'에 대한 참조를 추가해야합니다.

c : \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files \ meseems.webapp \ 68e2ea0f \ 8c5ee951 \ assembly \ dl3 \ 52ad4dac \ 84698469_3bb3d401 \ System.Collections.Immutable.DLL : (기호 관련 위치 이전 오류로)

프로젝트에 추가 된 새 패키지가 이전 버전의 .NET Framework를 참조하고있어 "여러 어셈블리에서 정의"문제 (CS1685)가 발생하여 런타임시 면도기보기 컴파일러 오류가 발생했습니다.

호환되지 않는 패키지 (System.Collections.Immutable.dll)를 제거했는데 문제가 발생하지 않았습니다. 그러나 프로젝트에서 패키지를 제거 할 수없는 경우 Baahubali 's answer 을 시도해야합니다 .


2

Tfs 2013 빌드 서버에서 테스트 프로젝트에서 동일한 오류가 발생했습니다. .Net 4.5.1에서 실행되는 기본 웹 프로젝트.

System Runtime의 nuGet 패키지를 설치하고 packages \ System.Runtime.4.3.0 \ ref \ net462 \ System.Runtime.dll에서 참조를 추가했습니다.

그것은 나를 위해 그것을 해결했다.


.NET 4.5.1 프로젝트에서 .NET 4.6.2 DLL을 사용하도록 지시했기 때문에 작동하지 않을 것입니다.
Chris Marisic

1
.. 그리고 그것은 저에게도 효과가있었습니다. ... \ 45 \ ... 폴더에는 스텁 파일 만 있기 때문에 선택의 여지가 없습니다. _._
nathanchere



1

웹 API 프로젝트 및 여러 라이브러리 프로젝트가있는 솔루션 에서이 문제가 발생했습니다. 라이브러리 프로젝트 중 하나는 빌드시 엉망이었으며 Unity 속성이 "유효한"속성이 아니라는 오류와 함께 System.Runtime을 참조해야한다는 오류가 발생했습니다.

많은 검색, 4.5.2 개발자 팩 재설치 및 아무 것도 작동하지 않으면 버전 불일치 일 것입니다. 그래서 모든 프로젝트의 속성을 살펴 보았고, 기본 라이브러리 중 하나는 4.5를 목표로하고 다른 하나는 4.5.2를 목표로하고있었습니다. 4.5.2를 대상으로하도록 변경하고 오류가 사라졌습니다.


1

"C : \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.5.1 \ Facades \ system.runtime.dll"파일을 프로덕션 서버의 bin 폴더에 복사하면 문제가 해결됩니다.


다른 방법은 프로젝트에서이 어셈블리에 대한 참조를 추가하고 로컬 복사 = True를 설정하는 것입니다.
John Mc


0

나를 위해이 코드 줄만 도움이되었습니다.

Assembly.Load("System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");


-1

Nuget Package Manager에서 참조를 제거하고 다시 추가하면 문제가 해결되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.