Visual Studio 2017-파일 또는 어셈블리 'System.Runtime, Version = 4.1.0.0'또는 해당 종속성 중 하나를로드 할 수 없습니다.


103

Visual Studio 2017을 사용하고 있으며 .Net Standard 1.5 라이브러리를 만들고 .Net 4.6.2 nUnit 테스트 프로젝트에서 사용하려고합니다.

다음과 같은 오류가 발생합니다.

파일 또는 어셈블리 'System.Runtime, Version = 4.1.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'또는 해당 종속성 중 하나를로드 할 수 없습니다. 시스템이 지정된 파일을 찾을 수 없습니다.

나는 다음을 시도했다 :

  1. 프로젝트 참조로 Std 라이브러리를 참조하십시오. 오류 : 이전 오류를 표시합니다.
  2. 내 Std 라이브러리에 대한 NuGet pkg를 만들고 참조하십시오. 오류 : 형식은 System.String이며 System.String이 필요합니다. 이는 System.Runtime이 결국 프로젝트에서 참조되고 모든 표준 형식에 대한 정의가 있기 때문입니다.
  3. 참조 NuGet pkg NetStandard.Library. 오류 : # ( "유형은 System.String, System.String 예상")과 동일한 오류를 제공합니다. 참고 :이 작업을 수행하기 전에 프로젝트에서 모든 NuGet 패키지를 지운 다음 nUnit 및 NetStandard.Library 패키지 (45 개의 다른 패키지를 설치 함) 만 추가했습니다.

이것은 버그입니까? 해결 방법이 있습니까? 도움을 주시면 감사하겠습니다.

답변:


91

나는 똑같은 문제가 있었고 내가 찾은 제안 된 해결책이 없었다. 이 문제에 대한 내 해결책은 App.config 및 packages.config를 확인하여 버전이 일치하는지 확인하는 것입니다.

원래 내 app.config에는 다음이 포함되었습니다.

<dependentAssembly>
  <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly>

그러나 packages.config에는 다음이 포함되었습니다.

<package id="System.Runtime" version="4.3.0" targetFramework="net461" requireReinstallation="true" />

newVersion에 대한 packages.config와 일치하도록 app.config 항목을 수정했습니다.

<dependentAssembly>
  <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.3.0" />
</dependentAssembly>

변경 후 문제가 해결되었습니다.


또는 web.config에 대한 참조를 추가하십시오. stackoverflow.com/a/38603514/1145177
Doug S

7
나는 NuGet에서 "4.3.0"을 뽑아하지만 어떤 이유로 VS ... 난 주변 단지 다른 버전 번호가 나를 위해 일 "4.1.2.0", 유사한 작업을 참조한다고 주장
데이비드 로저스을

MSTest 프로젝트에서 @DavidRogers와 같은 문제가 발생했습니다. app.config와 packages.config의 차이점을 통합하여 문제가 해결되었습니다.
Octoate

감사합니다 ! 이것은 내 MSTest가 테스트를 찾지 못하는 솔루션이었습니다 [MSTest][Discovery] Failed to discover tests from assembly Reason:Could not load file or assembly 'System.Reflection, Version=4.1.1.0 etc
Dan M

솔루션이 저에게 효과적이었습니다. HtmlAgilityPack NUGET 설치 후 문제가 시작되었습니다. 그리고 패키지의 잘못된 버전 정보로 인해 실행되지 않습니다. +1
Roberto

35

이 문제는 .NET 4.x 프로젝트에서 .NET Standard 프로젝트를 참조 할 때 발생합니다. .NET Standard 프로젝트의 nuget 패키지 참조는 종속성으로 가져 오지 않습니다.

이 문제를 해결하려면 .NET 4.x csproj 파일이 현재 빌드 도구 (최소 14 개)를 가리키는 지 확인해야합니다.

<Project ToolsVersion="15.0">...

아래는 더 이상 필요하지 않으며 VS 15.3에서 수정되었습니다.

있었다 알려진 버그 VS2017에서 특히 NuGet 4.0.

버그를 해결하려면 .NET 4.x 프로젝트 용 .csproj 파일을 열고 다음 코드 조각을 추가해야합니다.

<ItemGroup>
  <PackageReference Include="Legacy2CPSWorkaround" Version="1.0.0">
    <PrivateAssets>All</PrivateAssets>
  </PackageReference>
</ItemGroup>

NuGet 4.x는 더 이상 packages.config가 아닌 "패키지 참조"를 제공하지만 이전 4.x 파이프 라인은 VS2017 출시 시점에 완전히 업데이트되지 않았습니다. 위의 스 니펫은 종속성에서 패키지 참조를 올바르게 포함하도록 빌드 시스템을 "깨우는"것처럼 보입니다.


Visual Studio 17의 어떤 업데이트? 버전을 지정할 수 있습니까?
Ronak Agrawal

11
15.5.5 VS2017에서 여전히 문제가 있습니다. 다른 원인이있는 것 같습니다.
SerG

질문 : .NET 4.x 프로젝트가 패키지 참조를 사용하고 있습니까, 아니면 여전히 packages.config를 사용하고 있습니까? 이것이 나에게 해결 된 것처럼 보이는 이유가 packages.config를 제거했기 때문인지 궁금합니다.
Cory Nelson

2
Visual Studio 2017 버전 15.7 이상에서는 packages.config 관리 형식에서 PackageReference 형식으로의 프로젝트 마이그레이션을 지원한다는 점에 주목할 가치가 있습니다. docs.microsoft.com/en-us/nuget/reference/…
tranquil tarn

링크에서 @tranquiltarn : "현재 C ++ 및 ASP.NET 프로젝트에 마이그레이션을 사용할 수 없습니다."
JP Hellemons

34

최근에이 문제가 발생하여이 스레드 및 기타 항목에서 언급 된 많은 것을 시도했습니다. 나는에 대한 패키지 참조를 추가 "System.Runtime", nuget 패키지 관리자에 의해 바인딩 redicts을 고정 app.config하고 있는지 확인이 app.configpackage.config어셈블리에 대해 동일한 버전을 가지고있다. 그러나 문제는 계속되었습니다.

마지막으로 <dependentAssembly>어셈블리 의 태그를 제거 하고 문제가 사라졌습니다 . 따라서 app.config.

<dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.1.0" />
</dependentAssembly>

편집 : .NET 프레임 워크를 4.7.2로 업데이트 한 후 문제가 다시 나타납니다. 위의 트릭을 시도했지만 작동하지 않았습니다. 많은 시간을 낭비한 후 System.Linqapp.config 의 오래된 참조로 인해 문제가 발생한다는 것을 깨달았습니다 . 따라서이 문제를 제거하려면 모든 Linq 참조를 제거하거나 업데이트하십시오.


4
OP에 지정된 문제가 발생할 때마다 .config 파일에서 System.Runtime 정보를 삭제하면 문제가 해결됩니다. 나는 이것이 잠재적 인 유효한 해결책이라는 것에 동의합니다. 너겟에서 패키지를 추가하면 나에게 발생하는 경향이 있습니다.
Wallace B. McClure

나를 위해 일했습니다. 나는 오류를 가지고있다 xunit System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime, Version=4.1.2.04.7.2 내 프로젝트를 업그레이드 한 후
안톤 Krouglov

답변을 바탕으로 나는 thnx 내 nuget 패키지를 확인하고 내 프로젝트 사이에 'Google.protobuf의 요구를 (통합) 발견
Osama_Almaani

28

저를 믿으세요, 농담이 아닙니다. app.config에서 모든 System.Runtime 종속성을 제거하면 작동이 시작됩니다.


9
이것이 작동하는 이유에 대한 더 나은 설명이 도움이 될 것입니다.
Dour High Arch

이 방법의 문제점은 너겟 패키지를 업데이트하거나 새 너겟 패키지를 추가 할 때마다 다시 추가된다는 것입니다.
Vibgy

16

NUnit-Project에서 NetStandard.Library 및 다음 app.config 파일 을 참조하여 해당 오류를 해결했습니다 .

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Runtime.InteropServices" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.1.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

편집하다

System.Runtime, System.Reflection또는 이외의 항목 System.Runtime.InteropServices이 누락 된 경우 (예 :) System.LinqdependentAssembly노드를 추가 하십시오.

편집 2

새로운 Visual Studio 버전 (2017 15.8 내 생각)에서는 Studio가 app.config 파일을 생성 할 수 있습니다. 그냥 확인 자동 생성 바인딩 리디렉션 에서 체크 박스 응용 프로그램 - 프로젝트 - 속성을 . 바인딩 리디렉션 자동 생성

편집 3

바인딩 리디렉션 자동 생성 은 .NET 클래스 라이브러리에서 제대로 작동하지 않습니다. csproj 파일에 다음 줄을 추가하면이 문제가 해결되고 Classlibary에 대해 작동하는 .config 파일이 생성됩니다.

<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

11
이상하게, 나는에 의해 나를 위해 문제를 해결 제거 모든 <dependentAssembly>System.Runtime에 대한 노드를 ..
매트 Brewerton에게

@MattBrewerton 확인!
Bart De Boeck

13

app.config를 삭제하여 수정했습니다.

<assemblyIdentity name="System.Runtime" ....> 

항목.

app.config 리팩토링 중에 자동으로 추가되었지만 필요하지 않음


이것은 나를 위해 일했습니다! 다른 모든 항목이 당신을 위해 밖으로 작동하지 않는 경우 확실히 이것을 시도
bOkeifus

3

이 문제는 .NET 4.x 프로젝트에서 .NET Standard 프로젝트를 참조 할 때 발생합니다. .NET Standard 프로젝트의 nuget 패키지 참조는 종속성으로 가져 오지 않습니다.

System.Runtime 4.3및 NETStandard.Library 패키지 를 추가 하고 !! 중요 !! 리팩터링 도구를 사용하여 System.Runtime.dll 버전을 조회했지만 4.1.1.1그렇지 않은 4.3다음 .config에 bindingRedirect를 추가합니다.

<dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="4.1.1.1" />
</dependentAssembly>

3

나는 너무 늦었다. 그러나 성공적인 대답은 없다. 다른 웹 사이트에서 답을 찾았습니다. System.Runtime 어셈블리 종속성을 삭제할 때 문제를 해결했습니다. 나는 이것을 삭제했다.

<dependentAssembly> <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/> </dependentAssembly>

친애하는


2

dotnet 프레임 워크 4.6.2를 대상으로하는 NUnit 2.6.4 프로젝트에서이 문제가 발생했습니다. HumanizerSystem.Runtime FileNotFound 를 사용하는 동안 오류 가 발생했습니다 .

단위 테스트 프로젝트에 NetStandard.Library 를 설치하여 오류를 수정 했습니다.


2

우리가 발견 한 AutoGenerateBindingRedirects이 문제를 일으키는 원인이 될 수 있습니다.

관찰 됨 : 동일한 프로젝트를 대상으로 net45하고 netstandard1.5한 시스템에서 성공적으로 빌드되었지만 다른 시스템에서는 빌드하지 못했습니다. 머신에는 서로 다른 버전의 프레임 워크가 설치되어 있습니다 (4.6.1-성공 및 4.7.1-실패). 첫 번째 컴퓨터의 프레임 워크를 4.7.1로 업그레이드 한 후에도 빌드가 실패했습니다.

Error Message:
 System.IO.FileNotFoundException : Could not load file or assembly 'System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
  ----> System.IO.FileNotFoundException : Could not load file or assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

Auto binding redirects의 기능입니다 .net 4.5.1. nuget이 프로젝트가 동일한 어셈블리의 다른 버전을 전 이적으로 참조하고 있음을 감지 할 때마다 모든 버전을 가장 높은 필수 버전으로 리디렉션하는 출력 디렉터리에 구성 파일을 자동으로 생성합니다.

우리의 경우 모든 버전 System.RuntimeVersion=4.1.0.0. 런타임 버전 .net 4.7.1과 함께 제공 4.3.0.0됩니다. 따라서 리디렉션 바인딩은 최신 버전의 프레임 워크에서 사용할 수없는 버전으로 매핑되었습니다.

4.5 대상에 대한 자동 바인딩 리디렉션을 비활성화하고 .net 코어에만 남겨 두는 문제가 해결되었습니다.

<PropertyGroup Condition="'$(TargetFramework)' == 'net45'">
  <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
</PropertyGroup>

2

이 문제에는 여러 가지 원인이 있습니다 ... 제 경우에는 문제가 내 web.config에 System.Runtime 어셈블리를 추가하는 태그였습니다.

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

그러나 한 패키지는 다른 버전과의 종속성과 동일한 어셈블리를 추가했습니다.

<package id="System.Runtime" version="4.3.0" targetFramework="net47" />

내 web.config에서 "어셈블리 추가"태그를 제거하면 문제가 해결되었습니다.


2

packages.config와 app.config 사이에 버전 충돌이있을 때 문제가 발생한 것 같습니다. app.config에는 "AutoGenerateBindingRedirects"라는 것에 의해 자동으로 생성 된 어셈블리 바인딩 리디렉션이 있습니다. nuget 패키지를 다운로드 할 때마다 활성화되면 packages.config에 새 항목을 만드는 것 외에도이 바인딩 리디렉션 정보를 app.config에 추가합니다. 그 목적은 다음과 같습니다. Assembly Binding redirect : How and Why?

@Evk 사용자가 작성한 내용을 읽을 수 있습니다.

바인딩 리디렉션이 필요한 이유는 무엇입니까? 라이브러리 B를 참조하는 애플리케이션 A와 버전 1.1.2.5의 라이브러리 C가 있다고 가정합니다. 라이브러리 B는 라이브러리 C도 참조하지만 버전 1.1.1.0입니다. 런타임에 동일한 어셈블리의 다른 버전을로드 할 수 없기 때문에 이제 충돌이 발생합니다. 이 충돌을 해결하려면 일반적으로 새 버전으로 바인딩 리디렉션을 사용할 수 있습니다.

따라서 빠른 수정 : app.config의 모든 항목을 제거하십시오.

제 경우에는 그 프로그램을 수행하는 것만으로도 작동하기 시작했지만 런타임에 동일한 어셈블리의 버전 충돌이없는 경우에만 작동 할 것입니다.

이러한 충돌이있는 경우 실제로 사용 된 어셈블리 버전과 일치하도록 app.config에서 이러한 버전 번호를 수정해야하지만 수동 프로세스는 고통스럽기 때문에 패키지 관리자 콘솔열어 다시 자동 생성하고 입력하여 패키지 재설치를 수행하는 것이 좋습니다. Update-Package -reinstall


1

내 .NET 4.6.1 웹 사이트에서이 상황을 여러 번 겪었습니다. 별도의 .NET Core 프로젝트에 대한 참조를 추가 할 때마다 문제가 발생했습니다. 빌드 할 때 Visual Studio는 이러한 교차 프레임 워크 참조가 유효하지 않다고 올바르게 경고했고 프로젝트 참조를 빠르게 삭제했습니다. 그 후 프로젝트는 잘 구축되었지만 웹 사이트에 액세스 할 때 System.Runtime 오류가 나타나 사라지기를 거부했습니다.

매번 수정은 어려웠지만 효과적이었습니다. 프로젝트 디렉토리를 삭제하고 소스 제어에서 다시 다운로드했습니다. 이전과 이후의 차이는 없었지만 프로젝트를 구축하고 불만없이 페이지에 액세스 할 수있었습니다.


1

Nuget을 통해 MsTest V2를 추가 한 후 단위 테스트 프로젝트에서 방금이 문제를 해결했습니다. app.config의 이름을 바꾸면 (효과적으로 제거) 나에게 트릭이되었습니다.

위의 모든 게시물을 읽은 후에도 왜 그런지 모르겠습니다. 죄송합니다!


1

Nuget 패키지 System.Runtime를 제거한 다음 다시 설치 하여 문제를 해결 했습니다.


1

app.config 또는 web.config에 추가

<dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="4.0.0.0"/>
</dependentAssembly>

1

같은 문제가있는 프로젝트가 있었는데, dotnet core 버전을 2.2에서 2.0으로 변경하여 문제를 해결했습니다. 문제가 남아있는 경우이 솔루션을 사용해보십시오.


1

단위 테스트를 실행하기 전에 app.config 파일에서 런타임 태그를 제거하기 만하면됩니다. 문제가 해결됩니다.


0

VS 2017 15.45에서 비슷한 문제가 발생했습니다. 프로젝트가 컴파일되고 실행되었지만 TPL Dataflow 개체에 액세스하려고 할 때 System.Runtime과 관련하여 system.IO.FileNotFoundException이 발생했는지 확인했을 때 발견했습니다.

솔루션에서 프로젝트를 확인했을 때 그중 하나 (맨 위)에 기본 프로젝트에서 사용하는 System.Runtime 패키지가 누락되었습니다. Nuget에서 설치하면 모두 올바르게 작동했습니다.


0

여기에서 모든 솔루션을 시도했지만 아무 소용이 없습니다. 결국 새 csproj 파일을 열고 다음 섹션을 수동으로 추가하여 문제를 해결했습니다.

<Reference Include="System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<HintPath>..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll</HintPath>
</Reference>

0

ASP.Net CORE 2.1을 사용하고 있으며 큰 저장소의 약 40 개 목록에서 .csproj를 선택하여 실행할 때이 오류가 발생했습니다. csproj 파일을 개별적으로 열었을 때 오류가 해결되었습니다. csproj가 열렸을 때 프로그램이 시작된 방식이 달랐습니다.


0

.NET 4.7.2 => .NET 4.5.2에서 전환 한 다음 다시 472로 전환하여이 문제를 해결했습니다. 따라서 패키지 관리자가 종속성을 해결할 수 없기 때문에 경우에 따라이 오류가 발생합니다.


0

이전에 작동했다면 App.config가 변경되어야합니다. App.config 실행 취소가 저에게 효과적이었습니다.


0

나는 또한이 오류를 겪었고 어떻게 제거했는지 공유했습니다.

내 경우 아래 줄은 webapi 프로젝트의 web.config에 있지만 package.config 파일에는 패키지 참조가 없습니다.

Webapi 프로젝트의 Web.config에있는 코드

<dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.3.0" />
</dependentAssembly>

요소를 닫기 전에 웹 API 프로젝트의 packages.config 파일에 추가 된 코드입니다.

<package id="System.Runtime" version="4.3.0" targetFramework="net461" />

내 사례에서 작동 한 또 다른 솔루션 :

프로젝트를 실행할 때 웹 사이트 / webapi에서 오류가 발생한 버전으로 어셈블리 버전을 변경해 볼 수있는 패키지 버전이 거의 다른 다른 컴퓨터 시스템에 프로젝트를 복사 한 경우에 작동 할 수있는 또 다른 Sure short. 이 경우와 같이 필요한 버전은 '4.1.0.0'이므로 web.config의 현재 버전을 아래와 같이 오류가 발생한 버전으로 변경해보십시오.

오류:

Could not load file or assembly 'System.Runtime, Version=4.1.0.0' or one of its dependencies

버전 CHange


0

Azure 함수를 빌드 할 때이 오류가 발생했습니다 (큐 트리거 사용, 차이가있을 경우).

이 경우 문제 AzureFunctionsVersion는가 v3 대신 v2로 설정 되었기 때문 입니다. VS2019를 통해 업데이트하려면 프로젝트를 언로드 한 다음 csproj 파일을 편집합니다. PropertyGroup노드 내에서 다음을 추가 / 편집합니다.

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