파일 또는 어셈블리 "시스템"을 로드할 수 없습니다.Net.Http, 버전=4.0.0, 문화=중립, 공개키토큰=b03f5f7f11d50a3a"
프로젝트를 Visual Studio 2015 Community와 SQL Server 2016 Express만 설치된 깨끗한 Windows 10 머신에 복사했습니다.Windows 10 및 VS2015 또는 SQL Server에 설치된 프레임워크 버전 외에 설치된 프레임워크 버전은 없습니다.
WebApi 프로젝트를 시작하려고 하면 다음과 같은 메시지가 나타납니다.
파일 또는 어셈블리 "시스템"을 로드할 수 없습니다.Net.Http, 버전=4.0.0, 문화=중립, 공개키토큰=b03f5f7f11d50a3a" 또는 그 종속성 중 하나.지정한 파일을 찾을 수 없습니다.
프로젝트의 패키지는 다음과 같습니다.
<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Tracing" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net45" />
NET Framework 4.6.1,System.Net.Http
.bin
더입니니다다
파일의 경로는 다음을 가리킵니다.
C:\Program Files(x86)\Reference 어셈블리\Microsoft\Framework.네트워크\v4.6.1\시스템.Net.Http.dll
:System.Net.Http.Formatting
★★★★★★★★★★★★★★★★★★:
C:\개발\MyApp\패키지\Microsoft.AspNet.WebApi.클라이언트.5.2.3\lib\net45\System.Net.Http.포맷.dll
프로젝트 전체가 4.5.1을 목표로 해야 하는가, 아니면 올바른 어셈블리를 참조할 수 있는 다른 방법이 있는가?
web.config( 정보를 에서는 "로 표시되어 가 응용 한 후 할 수 "web.config(" app.config)"를 수 .에서 바인딩 정보를 변경하면 내 보기에서는 "해크"인 동안 NuGet 패키지 업데이트가 응용 프로그램을 실행한 후 프로젝트를 진행할 수 있습니다.System.Net.Http
★★oldVersion="0.0.0.0-4.1.1.0"
★★★★★★★★★★★★★★★★★」newVersion="4.0.0.0"
과 같이
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.0.0.0" />
</dependentAssembly>
다음의 순서에 따릅니다.
Visual Studio를 최신 버전으로 업데이트(중요)
에서 모든 합니다.
web.config
이 파일을 파일에 추가합니다.
<PropertyGroup> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> </PropertyGroup>
프로젝트를 구축하다
서서
bin
.(WebAppName).dll.config
있어야 , .이것들을
web.config
위의 클립을 파일에서 제거합니다.
그건 작동할 거야.
제 프로젝트 중 하나에는 상위 버전의 시스템이 포함된 Nuget 패키지가 있었습니다.Net.Http. 및 스타트업 프로젝트에는 System에 대한 참조가 있습니다.Net.Http v 4.0.0 을 인스톨 했을 뿐입니다.스타트업 프로젝트의 Net.Http nuget 패키지와 문제 해결
다음을 변경합니다.
<bindingRedirect oldVersion="0.0.0.0-4.1.1.2" newVersion="4.1.1.2" />
다음을 포함합니다.
<bindingRedirect oldVersion="0.0.0.0-4.1.1.2" newVersion="4.0.0.0" />
web.config의
하지 않기 에 bind-redirect에 대한 했습니다.System.Net.Http
web.config
모든 것이 문제없이 잘 작동하는 것 같습니다.
<system.web>
<compilation debug="true" targetFramework="4.7.2">
<assemblies>
<!--<add assembly="System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />-->
<add assembly="System.ComponentModel.Composition, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>
</compilation>
<customErrors mode="Off" />
<httpRuntime targetFramework="4.7.2" />
</system.web>
솔루션에 여러 프로젝트가 있는 경우 Visual Studio에서 솔루션 아이콘을 마우스 오른쪽 버튼으로 클릭하고 '솔루션용 NuGet 패키지 관리'를 선택한 다음 네 번째 탭 '통합'을 클릭하여 모든 프로젝트를 동일한 버전의 DLL로 통합합니다.그러면 통합할 참조 어셈블리 목록이 나타납니다.목록의 각 항목을 클릭한 다음 오른쪽에 나타나는 탭에서 설치를 클릭합니다.
이것은 에서 동작합니다.NET 4.7.2 및 Visual Studio 2017(15.9.4):
- web/app.config 바인딩 리다이렉트 삭제
- 시스템용 NuGet 패키지를 제거합니다.Net.Http
- [ Add New Reference ]를 열고 에 부속된 새로운 4.2.0.0 빌드에 직접 링크합니다.NET 4.7.2
프로젝트를 로 업그레이드하면 이 문제를 해결할 수 있습니다.NET Framework 4.7.2.이 답변은 Alex Ghiondea(MSFT)에 의해 이루어졌습니다.정말 그럴 자격이 있는 분이니깐!
이것은, 에서 기존의 문제로 문서화되어 있습니다.NET Framework 4.7.1.
이 문제를 해결하려면 프로젝트에 이러한 대상을 추가할 수 있습니다.SGEN에 전달된 참조 목록에서 DesignFacadesToFilter를 삭제합니다(SGEN이 완료되면 다시 추가합니다).
<Target Name="RemoveDesignTimeFacadesBeforeSGen" BeforeTargets="GenerateSerializationAssemblies"> <ItemGroup> <DesignFacadesToFilter Include="System.IO.Compression.ZipFile" /> <_FilterOutFromReferencePath Include="@(_DesignTimeFacadeAssemblies_Names->'%(OriginalIdentity)')" Condition="'@(DesignFacadesToFilter)' == '@(_DesignTimeFacadeAssemblies_Names)' and '%(Identity)' != ''" /> <ReferencePath Remove="@(_FilterOutFromReferencePath)" /> </ItemGroup> <Message Importance="normal" Text="Removing DesignTimeFacades from ReferencePath before running SGen." /> </Target> <Target Name="ReAddDesignTimeFacadesBeforeSGen" AfterTargets="GenerateSerializationAssemblies"> <ItemGroup> <ReferencePath Include="@(_FilterOutFromReferencePath)" /> </ItemGroup> <Message Importance="normal" Text="Adding back DesignTimeFacades from ReferencePath now that SGen has ran." /> </Target>
다른 옵션(머신 전체)은 sgen.exe.config에 다음 바인딩 리다이렉트를 추가하는 것입니다.
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.IO.Compression.ZipFile" publicKeyToken="b77a5c561934e089" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime> This will only work on machines with .NET Framework 4.7.1. installed. Once .NET Framework 4.7.2 is installed on that machine, this workaround should be removed.
VS2017의 4.6.1-2 사용자는 원치 않는 버전의 시스템 교체를 경험할 수 있습니다.사용하고 싶은 VS2017 또는 Msbuild 15의 Net.Http.
여기서 이 버전을 삭제했습니다.
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\Microsoft.NET.빌드내선번호\net461\lib\System.Net.Http.dll
또, 이하와 같이 됩니다.
C:\Program Files (x86)\Microsoft Visual Studio\2017\Build도구\MS빌드\Microsoft\Microsoft.NET.빌드내선번호\net461\lib\System.Net.Http.dll
그런 다음 NuGet을 통해 참조한 버전을 사용하여 프로젝트를 구축합니다.
같은 문제가 있어서 그것을 해결할 수 있는 유일한 방법은 bindingRedirect를 app에 추가하여 @tripletdad99를 어떻게 썼는지 확인하는 것입니다.
그러나 더 많은 프로젝트가 포함된 솔루션이 있다면 모든 프로젝트를 수작업으로 업데이트해야 합니다(또한 업데이트 후 nuget 패키지를 다시 업데이트해야 할 수도 있습니다).그리고 이것이 내가 모든 app.config가 되는 간단한 powershell 스크립트를 작성한 이유입니다.
param(
[string]$SourceDirectory,
[string]$Package,
[string]$OldVersion,
[string]$NewVersion
)
Write-Host "Start fixing app.config in $sourceDirectory"
Write-Host "$Package set oldVersion to $OldVersion and newVersion $NewVersion"
Write-Host "Search app.config files.."
[array]$files = get-childitem $sourceDirectory -Include app.config App.config -Recurse | select -expand FullName
foreach ($file in $files)
{
Write-Host $file
$xml = [xml](Get-Content $file)
$daNodes = $xml.configuration.runtime.assemblyBinding.dependentAssembly
foreach($node in $daNodes)
{
if($node.assemblyIdentity.name -eq $package)
{
$updateNode = $node.bindingRedirect
$updateNode.oldVersion = $OldVersion
$updateNode.newVersion =$NewVersion
Write-Host "Fix"
}
}
$xml.Save($file)
}
Write-Host "Done"
사용 예:
./scripts/FixAppConfig.ps1 -SourceDirectory "C:\project-folder" -Package "System.Net.Http" -OldVersion "0.0.0.0-4.3.2.0" -NewVersion "4.0.0.0"
아마 완벽하지 않을 것이고 누군가가 그것을 사전 구축 작업과 연결시켜주면 더 좋을 것이다.
Web.config를 열고 그 안에 있는 모든 것을 포함하여 <runtime>을 삭제합니다.
<**runtime> <assembly binding xmlns="urn:schemas-filen-com:asm.v1"> </filength>
Web.config를 저장하고 닫습니다.
Package Manager Console을 열고 명령을 실행합니다.
Add-Binding Redirect(바인딩 리다이렉트 추가)
이것으로 팀원이 에서 업그레이드 했을 때 문제가 해결되었습니다.NET Framework 4.6.1 ~NET Framework 4.8 및 VS 2017 ~ VS 2022
저는 이것을 가지고 있었습니다만, 바인딩 리다이렉트를 갱신한 NuGet 패키지를 추가했기 때문입니다.패키지를 꺼냈을 때 방향 수정은 그대로였습니다.모두 삭제하고 update-package - reinstall을 실행했습니다.이것으로 올바른 리다이렉트가 추가되었습니다.
트릭 및 복잡한 구성을 수행하기 전에 bin 및 obj 폴더를 삭제한 후 컴파일하십시오.그것은 같은 문제를 해결했다.
.net 프레임워크 버전을 확인합니다.
원래 .net 프레임워크는 오래된 버전입니다.
.net Framework 4.6을 설치하면 이 문제는 자동으로 해결됩니다.
저는 최신 버전에서 실행되도록 프로젝트를 설정했습니다.Net Framework(에서 변경).넷 프레임워크 4.6.1에서 4.7.2).
모든 것이 작동했고, 오류도 없었고, 문제없이 출판되었습니다. 그리고 우연히 그 시스템을 알게 되었습니다.Net.Http 에러 메세지는, 작고, 주목하기 어렵지만, 작업하고 있는 Web 사이트에서 꽤 중요한 API 요구에 표시됩니다.
4.6.1로 롤백하면 모든 것이 정상입니다.
이 문제를 완전히 해결할 수 있는 유일한 방법(.NET 4.6.1)은 시스템에 Nuget 참조만 추가하는 것이 아닙니다.실제로 시스템을 사용한 프로젝트의 Net.Http V4.3.4.Net.Http뿐만 아니라 스타트업 프로젝트(내 경우 테스트 프로젝트)에도 적용됩니다.
(이상한 것은 올바른 시스템이기 때문입니다.Net.Http.dll은 테스트 프로젝트의 bin 디렉토리에 존재하며 .config assemblyBings도 정상으로 보입니다.)
nuget(포함)을 사용하여 오래된 웹 사이트를 업데이트하고 있었습니다.넷 업데이트 및 MVC 업데이트).
시스템을 삭제했습니다.VS2017 에서의 Net.HTTP 레퍼런스(버전 2.0.0.0)와 레퍼런스를 재추가했습니다.이것에 의해, 4.2.0.0이 표시됩니다.
그런 다음 nuget을 사용하여 많은 '패키지'를 업데이트하고 에러 메시지를 받았습니다.그 후, 2.0.0.0에 대한 참조가 리셋 되어 있는 것을 알아차리고, 삭제 후 재추가하면, 정상적으로 동작합니다.이상합니다.
저 같은 경우에는 nuget을 다시 넣었더니 문제가 해결되었습니다.
name=에 대한 dependentAssembly를 제거하는 중"System.Net.web.config의 Http"도 작동했습니다.이 부분은 web.config에서 코멘트를 했는데 효과가 있었어요.위의 모든 솔루션이 효과가 없는 경우 다음과 같이 코멘트 또는 삭제를 시도합니다.
<!--<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.1.2" newVersion="4.0.0.0"/>
</dependentAssembly>-->
에서 프로젝트를 업그레이드한 후 이 문제가 발생하였습니다.NET Framework 4.6 ~NET Framework 4.8컨피규레이션파일에는 이전 버전의 행이 남아 있었습니다.
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
서버에는 가 없습니다.NET Framework 4.8이 설치되어 있습니다.
상기의 행을 수정한 후, 을 인스톨 합니다.서버상에서 NET Framework 4.8을 재기동하면 동작합니다.
언급URL : https://stackoverflow.com/questions/38408167/could-not-load-file-or-assembly-system-net-http-version-4-0-0-0-culture-neutr
'bestsource' 카테고리의 다른 글
jQuery에서 React.js로 전환하는 방법 (0) | 2023.04.04 |
---|---|
단순 ng-include가 작동하지 않음 (0) | 2023.04.04 |
에러, 「put(K, V)」를 raw 타입의 「java.util」의 멤버로서 오프 콜.해시맵' (0) | 2023.04.04 |
참조 콩을 유형별로 목록에 자동 연결 (0) | 2023.04.04 |
앱 렌더링 html 엔티티(예: 앰퍼샌드)를 이스케이프로 응답 (0) | 2023.03.25 |