파일 또는 어셈블리 'Microsoft.Web.Infrastructure,


79

내 웹 사이트를 서버에 업로드하려고했습니다. 내 로컬 호스트에서 제대로 작동했기 때문에 내 localhost wwwroot폴더의 모든 것을 서버 에 업로드 하고 연결 문자열을 변경했습니다.

그러나 다음과 같은 오류가 있습니다.

Exception information: 
    Exception type: InvalidOperationException 
    Exception message: The pre-application start initialization method Start on type RouteDebug.PreApplicationStart threw an exception with the following error message: Could not load file or assembly 'Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified..
   at System.Web.Compilation.BuildManager.InvokePreStartInitMethods(ICollection`1 methods)
   at System.Web.Compilation.BuildManager.CallPreStartInitMethods()
   at System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException)

Could not load file or assembly 'Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
   at RouteDebug.PreApplicationStart.Start()

프로젝트는 nopcommerce.

이 오류를 해결하려면 어떻게해야합니까?


호스트에 동일한 종속성
Mike Trusov

답변:


57

프로젝트에 dll을 포함하고 이에 대한 참조도 추가해야합니다.

다음은 이미 스택에있는 유사한 문제에 대한 링크입니다. MVC3 배포 종속성 문제


"_bin_deployableAssemblies"floder도 서버에 업로드해야합니까 ??
user1348351

이를 처리하는 몇 가지 다른 방법이 있으며 배포 방법에 따라 다릅니다. 그러나 내 게시물의 링크를 클릭 한 다음 확인 표시가있는 최상위 답변의 블로그를 살펴보면 올바르게 설정하면 _bin_deployableAssemblies의 dll이 작업을 수행 할 때 자동으로 처리되어야한다는 것을 알 수 있습니다. 배포 (또는 웹 배포). 제가 언급 한 블로그 링크입니다.
Colin Pear

5
이 링크가 연결되는 블로그는 더 이상 사용할 수없는 것 같습니다. 이 답변 -stackoverflow.com/a/12683392/137474가 저에게 효과적 이었습니다.
Baldy

@ColinPear, 정말 감사합니다. 나는 그것을 요청한 전자 상거래 웹 APplication이 있었다!.
PatsonLeaner

제 경우에는 내 사이트가 "Microsoft.Web.Infrastructure.dll"없이 plesk에서 작동하지만 cpanel로 이동하면이 오류가 표시됩니다!
Omid-RH

39

Reference Cleaning을 수행 한 후, 제거 Microsoft.Web.Infrastructure되었지만 packages.config 파일 에서는 제거 되지 않았습니다. 를 사용하여 다시 추가하려고 시도한 후 Package Manager ConsoleVisual Studio는 이미 설치되어 있다고 표시하며 제거 되었기 때문에 false입니다.

그런 다음 packages.config파일 에서 코드 줄을 제거했습니다.

<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />

명령을 다시 실행했습니다.

PM> Install-Package Microsoft.Web.Infrastructure

그 후에 이제 잘 작동합니다.


32

여기 에서 다운로드 한 AspNetMVC3ToolsUpdateSetup을 설치 하면 참조를 추가하지 않고도이 문제가 해결됩니다.


28

답변의 수에도 불구하고 IMHO가 상황을 좀 더 명확하게 만드는 다른 답변을 추가하겠습니다.

으로 wrightmail 이미 언급 Microsoft.Web.Infrastructure(링크가 필요하지, 당신은 NuGet 패키지 관리자에서 그것을 가지고)는 NuGet 패키지입니다.

분명히 그것은 당신의 프로젝트에 의해 참조되었고 갑자기 사라졌습니다. 여러 가지 이유가있을 수 있지만 중요한 것은 다음 과 같은 방법으로 Visual Studio에서 자동 패키지 복원을 사용하도록 설정했을 수 있다는 것입니다 .

  • 솔루션 용 NuGet 패키지 관리 (솔루션 탐색기의 컨텍스트 메뉴),
  • NuGet이 누락 된 패키지 (설정)를 다운로드하도록 허용
  • Visual Studio에서 빌드하는 동안 누락 된 패키지를 자동으로 확인 (설정),

특정 패키지는 수동 재설치가 필요할 수 있습니다. NuGet을 혼동하는 것이 무엇인지 모르고 참조를 수동으로 제거 할 수도 있지만 여기에 일반적으로 이러한 경우에 적용하는 솔루션이 있습니다. 다음 PM 콘솔은 원래 버전을 보존하면서 패키지를 복원하는 데 도움이됩니다 (기존의 새 버전으로 업데이트하지 않음).

업데이트 패키지 Microsoft.Web.Infrastructure-재설치

프로젝트에서 사용했을 수있는 "이전"기능을 제거 할 수있는 새 버전으로 실수로 기존 패키지를 덮어 쓰지 않으려면 버전 보존이 필요할 수 있습니다.

그리고 조금 길지만 버전이 변경되지 않는다는 증거로, 다음은 명령이 실행될 때의 출력입니다.

PM> Update-Package Microsoft.Web.Infrastructure -Reinstall
Attempting to gather dependencies information for multiple packages with respect to project 'Samples.NuGet\DemoApp\DemoApp', targeting '.NETFramework,Version=v4.5.2'
Attempting to resolve dependencies for multiple packages
Resolving actions install multiple packages
...
Package removal starts here...
...
Removed package 'Microsoft.AspNet.Web.Optimization 1.1.3' from 'packages.config'
Successfully uninstalled 'Microsoft.AspNet.Web.Optimization 1.1.3' from DemoApp
Removed package 'WebGrease 1.5.2' from 'packages.config'
Executing script file 'D:\Projects\DemoApp\packages\WebGrease.1.5.2\tools\uninstall.ps1'
Successfully uninstalled 'WebGrease 1.5.2' from DemoApp
...
More package removals here. Omitted for brevity...
...
Removed package 'Microsoft.Web.Infrastructure 1.0.0.0' from 'packages.config'
Successfully uninstalled 'Microsoft.Web.Infrastructure 1.0.0.0' from DemoApp
...
More package removals here. Omitted for brevity...
...
Removed package 'Antlr 3.4.1.9004' from 'packages.config'
Successfully uninstalled 'Antlr 3.4.1.9004' from MvcLenseApp
Package 'Antlr.3.4.1.9004' already exists in folder 'D:\Projects\Lense.Mvc5\packages'
--- Install packages (in reverse order) ---
Package 'Antlr.3.4.1.9004' already exists in folder 'D:\Projects\DemoApp\packages'
Added package 'Antlr.3.4.1.9004' to 'packages.config'
Successfully installed 'Antlr 3.4.1.9004' to DemoApp
...
More package installs here. Omitted for brevity...
...
Package 'Microsoft.Web.Infrastructure.1.0.0' already exists in folder 'D:\Projects\Lense.Mvc5\packages'
Added package 'Microsoft.Web.Infrastructure.1.0.0' to 'packages.config'
Successfully installed 'Microsoft.Web.Infrastructure 1.0.0' to MvcLenseApp
...
More package installs here. Omitted for brevity...
...
Package 'WebGrease.1.5.2' already exists in folder 'D:\Projects\DemoApp\packages'
Added package 'WebGrease.1.5.2' to 'packages.config'
Executing script file 'D:\Projects\DemoApp\packages\WebGrease.1.5.2\tools\install.ps1'
Successfully installed 'WebGrease 1.5.2' to DemoApp
Package 'Microsoft.AspNet.Web.Optimization.1.1.3' already exists in folder 'D:\Projects\DemoApp\packages'
Added package 'Microsoft.AspNet.Web.Optimization.1.1.3' to 'packages.config'
...
End of package re-install. 
...
Successfully installed 'Microsoft.AspNet.Web.Optimization 1.1.3' to DemoApp
PM> 

물론 모든 패키지를 다시 설치하려면 NuGet herehere의 업데이트 / 설치 명령에 익숙해 져야 할 수 있습니다 .


27

내 dev box에서 작동했지만 어셈블리가 프로젝트에 추가되지 않았습니다. NuGet에서 Microsoft.Web.Infrastructure를 검색하고 거기에서 설치합니다. 그런 다음 로컬 복사가 선택되어 있는지 확인하십시오.


1
같은 문제는 CopyLocal = True 였는데 왜 작동하지 않았는지 모르겠습니다. 귀하의 솔루션은 내 문제 : 해결
고토

6

기존 프로젝트가있는 VS2015의 새 Windows 10 컴퓨터에서이 문제가 발생했습니다. 패키지 관리자 3.4.4. 복원 패키지가 활성화되었습니다.

복원이 완전히 작동하지 않는 것 같습니다. 패키지 관리자 명령 줄에서 다음을 실행해야했습니다.

Update-Package -ProjectName "YourProjectName" -Id Microsoft.Web.Infrastructure -Reinstall

이로 인해 복원이 수행하지 않은 솔루션 파일이 다음과 같이 변경되었습니다.

<Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
  <Private>True</Private>
</Reference>

솔루션 파일의 ItemGroup 섹션에 위의 요소를 추가하면 .. \ packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40 \ Microsoft.Web.Infrastructure.dll이 존재하는 경우 문제도 해결됩니다.

-Reinstall을 수행하는 것이 더 쉽지만 패키지 복원과 다른 점을 이해하는 것이 좋습니다.


나는 같은 문제가 있었다. 솔루션의 "누겟 패키지 복원"마우스 오른쪽 단추 클릭 메뉴 옵션을 시도했습니다. 출력은 복원 할 것이 없다고 나에게 알려줍니다. 귀하의 조언에 따라 패키지 관리자 콘솔에서 Update-Package -ProjectName "my project name here"를 실행했으며 모든 패키지가 올바르게 추가되었습니다
Rob Bowman

@RobBowman 대단한 Rob입니다. 귀하의 경우에는 중요하지 않을 수 있지만 -Reinstall 플래그도 포함하도록주의하십시오. 이렇게하면 이전과 동일한 패키지 버전을 사용할 수 있습니다. 이 플래그를 생략하면 패키지를 최신 버전으로 업데이트하므로 의도하지 않은 경우 문제가 발생할 수 있습니다. 완전한 정보를 위해이를 참조 docs.microsoft.com/en-us/nuget/tools/ps-ref-update-package
로한

5

Resharper는 Microsoft.Web.Infrastructure를 사용하지 않는 참조로 감지하여 삭제했습니다. 로컬에서 잘 작동했지만 dev에 게시 한 후 동일한 오류가 발생했습니다.

결론, Resharper에서 사용하지 않는 것으로 표시된 참조를 삭제할 때주의하십시오.


이것이 바로 제가 한 일이었습니다.
AndreFeijo

제 경우에는 내 사이트가 "Microsoft.Web.Infrastructure.dll"없이 plesk에서 작동하지만 cpanel로 이동하면이 오류가 표시됩니다!
Omid-RH


3

비슷한 문제가있었습니다. NuGet이 패키지가 성공적으로 설치된 것으로 표시되었지만 참조가 내 프로젝트에 추가되지 않았습니다.

달리는 <PM> Install-Package Microsoft.Web.InfraStructure패키지 관리자가 이미 설치되어 있다고 계속 말했기 때문에 도 도움이되지 않았습니다.

마지막으로 csproj 파일을 편집하고 다음 줄을 추가하여 수동으로 추가했습니다.

 <Reference Include="Microsoft.Web.Infrastructure">
  <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
  <Private>True</Private>
</Reference>

그것은 문제를 해결했습니다.


csproj 파일을 확인했고 문제를 일으키는 폴더를 참조하고있었습니다. 추가 폴더 이름을 제거하면 내 문제가 해결되었습니다
superachu

2

응용 프로그램을 호스팅하는 서버에 ASP.NET MVC 프레임 워크를 다운로드해야합니다. 여기에서 다운로드하여 설치하면 빠른 수정이 가능합니다 (이는 MVC 3 프레임 워크 http://www.asp.net/mvc/mvc3 ).


2

나를 Microsoft.Web.Infrastructure.dll위해 bin 폴더에서 누락되었지만 프로젝트에서 로컬로 복사하도록 설정되지 않았습니다. 솔루션의 다른 프로젝트에서 dll을 복사하고 페이지가로드됩니다.


2

먼저 package.config에서 Microsoft.Web.Infrastructure를 제거합니다.

명령을 다시 실행했습니다.

PM> Install-Package Microsoft.Web.Infrastructure를 선택하고 로컬 복사 속성이 true 여야합니다.


1

매우 쉬운 솔루션 :

Visual Studio에서 도구 / 라이브러리 패키지 관리자 / 패키지 관리자 콘솔로 이동합니다.

<PM> Install-Package Microsoft.Web.InfraStructure

즐거운 시간 되세요


1

여기 내 시나리오가 있습니다.

프로젝트 A, B, C .. N을 포함하는 다중 프로젝트 솔루션이 있습니다.

프로젝트 B는 selectlist개체에 대한 팩토리를 포함하는 코드 라이브러리였습니다 .

프로젝트는 개발시 예상대로 실행되지만 테스트 환경에 게시 할 때 발생하는 오류가 발생했습니다.

Could not load file or assembly 'Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.

무슨 일이 있었는지 nuget 패키지 관리자를 통해 실수로 "Microsoft ASP.NET MVC"를 설치하여 다음과 같은 종속성을 설치했습니다.

  • Microsoft.AspNet.Razor
  • Microsoft.AspNet.WebPages

낮고 보라, Microsoft.AspNet.WebPages는 "Microsoft.Web.Infrastructure"에 의존합니다.

내 솔루션은 위에서 언급 한 세 가지 패키지 (MVC, Razor, WebPages)를 제거한 다음 참조를 마우스 오른쪽 버튼으로 클릭> 참조 추가> 어셈블리> 확장> System.Web.MVC를 제거했습니다.


Assembles를 통해 추가 할 수 없었지만 Nuget 패키지를 다시 추가하면 문제가 해결되었습니다
Nitesh

1

참조 속성에서 "로컬 복사"를 False로 설정 한 다음 다시 True로 설정해야했습니다. 이렇게하면 .csproj 파일에 Private True 설정이 추가되었습니다.

<Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">      <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
      <Private>True</Private>
    </Reference>

"Copy Local"이 True로 표시되었으므로 이미 설정되어 있다고 가정했습니다.


0

내 프로젝트에서 무슨 일이 일어 났는지 모르겠지만 DLL에 대한 잘못된 경로를 참조했습니다. Nuget이 제대로 설치했으며 실제로 다른 패키지와 함께 내 파일 시스템에 있었지만 잘못 참조되었습니다.

packages폴더 내 프로젝트에서 두 디렉토리를 존재하고 그것은 단지와 경로를 시작하여 일을 가고 있었다 ..\packages\. 시작 경로를 변경했고 ..\..\packages\문제가 해결되었습니다.


0

내 컴퓨터에서 Nuget 종속성이 올바르게 다운로드되지 않았고 nuget 패키지 내의 lib 폴더가 존재하지 않아 오류가 발생했습니다.

전에

여기에 이미지 설명 입력

패키지 폴더에서 Nuget 패키지의 이름을 변경하고 Nuget은 필요한 lib 폴더로 올바르게 다시 다운로드했습니다.

여기에 이미지 설명 입력


0

물리적으로 제거 프로젝트 / 솔루션을 청소 어떤 경우 bin/obj/이러한 오류를 해결하는 것입니다 재건. 예를 들어 일부 패키지 및 참조가 설치 / 추가 된 다음 제거되어 일부 아티팩트가 남을 때 이러한 상황이 발생할 수 있습니다.

저에게 일어난 Microsoft.Web.Infrastructure: 처음 프로젝트가 해당 어셈블리를 필요로하지 않았다. 마지막에 순 효과가 0이되는 몇 가지 실험 후이 예외가 발생했습니다. 위의 단계는 사용하지 않는 종속성을 설치할 필요없이 문제를 해결했습니다.


0

나는이 문제가 있었다. 프로젝트에 DLL이 포함되었고 로컬 복사 설정은 기본적으로 true였습니다. DLL이 오랫동안 프로젝트에 있었기 때문에 시작된 이유를 모르겠습니다. ReSharper에서 제거 가능성이 있다는 언급을 들었지만 사용하지 않는 참조 제거를 실행했다고 말할 수는 없습니다.

저에게 도움이 된 것은 :-프로젝트에서 "Update-Package Microsoft.Web.Infrastructure -Reinstall"을 실행하여 전체 솔루션을 업데이트했지만 그 자체로 도움이되지는 않았습니다. -그런 다음 프로젝트 참조를 살펴보고 로컬 복사를 거짓으로 설정 한 다음 다시 참으로 설정했습니다. 이로 인해 실제로 DLL 참조 True 아래의 CSPROJ 파일에 줄이 추가되었습니다. 아니면 줄을 따라 ... 어느 쪽이든, 이제 빌드는 예상대로 파일을 복사하고 있습니다.


0

그래서 다음은 VS2019를 사용하여 저에게 효과적이었습니다. Microsoft.Web.Infrastructure가 동일한 솔루션의 다른 프로젝트에있는 동안 한 프로젝트에서 Nuget 패키지를 업데이트하려고하면이 오류가 발생했습니다. 내 프로젝트의 Packages 폴더에서 Microsoft.Web.Infrastructure.1.0.0.0 폴더를 삭제해야했습니다. nuget을 통해 다시 설치하면 모든 것이 다시 작동하기 시작했습니다. 미친 물건.

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