Visual Studio 2015 Community 및 SQL Server 2016 Express 만 설치된 깨끗한 Windows 10 컴퓨터에 프로젝트를 복사했습니다. Windows 10 및 VS2015 또는 SQL Server와 함께 설치된 다른 프레임 워크 버전은 없습니다.
WebApi 프로젝트를 시작하려고하면 다음 메시지가 나타납니다.
파일 또는 어셈블리 “System.Net.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 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 Assemblies \ Microsoft \ Framework.NETFramework \ v4.6.1 \ System.Net.Http.dll
파일의 경로는 다음을 System.Net.Http.Formatting
가리 킵니다.
C : \ Development \ MyApp \ packages \ Microsoft.AspNet.WebApi.Client.5.2.3 \ lib \ net45 \ System.Net.Http.Formatting.dll
전체 프로젝트가 4.5.1을 대상으로해야합니까, 아니면 올바른 어셈블리를 참조 할 수있는 다른 방법이 있습니까?
답변
다음 단계를 따르십시오
- Visual Studio를 최신 버전으로 업데이트 (중요)
- 에서 모든 바인딩 리디렉션 제거
web.config
-
이것을
.csproj
파일에 추가 하십시오 :<PropertyGroup> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> </PropertyGroup>
- 프로젝트 구축
- 에서
bin
폴더이 있어야(WebAppName).dll.config
파일 - 여기에 리디렉션이 있어야합니다.
web.config
.csproj
파일 에서 스니핑 된 위를 제거하십시오.
작동해야합니다
답변
내 web.config (또는 app.config)의 바인딩 정보 변경-내보기의 “해킹”동안 NuGet 패키지 업데이트가 응용 프로그램을 해킹하고 System.Net.Http를 제공 한 후 프로젝트를 진행할 수 있습니다. 오류.
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>
답변
내 프로젝트 중 하나에는 더 높은 버전의 System.Net.Http가있는 너겟 패키지가있었습니다. 시작 프로젝트에서 System.Net.Http v 4.0.0을 참조하면 시작 프로젝트에 System.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에서
답변
솔루션에 여러 프로젝트가있는 경우 Visual Studio에서 솔루션 아이콘을 마우스 오른쪽 버튼으로 클릭하고 ‘Manage NuGet Packages for Solution’을 선택한 다음 네 번째 탭 ‘Consolidate’를 클릭하여 모든 프로젝트를 동일한 버전의 DLL. 그러면 통합 할 참조 어셈블리 목록이 제공됩니다. 목록에서 각 항목을 클릭 한 다음 오른쪽에 나타나는 탭에서 설치를 클릭하십시오.
답변
나는에 대한 참조를 주석 때문에 위의 바인드 리디렉션 나를 위해 작동하지 않았다 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>
답변
프로젝트를 .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.