System.Web.Services 4.0.0.0 – błąd ładowania w .NET Framework i .NET Core, diagnostyka, bindingRedirect
Pytanie
One or more errors occurred. (Could not load file or assembly 'System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Nie można odnaleźć określonego pliku.)
Odpowiedź Sztucznej Inteligencji
Bezpośrednia odpowiedź na pytanie
- Aplikacja nie znajduje biblioteki System.Web.Services (4.0.0.0), bo
a) uruchamiasz ją poza .NET Framework (np. w .NET Core / .NET 5‑8) lub
b) biblioteka nie jest dostępna w GAC / katalogu bin, albo wersja się nie zgadza.
- Rozwiązanie: upewnij się, że projekt rzeczywiście wymaga .NET Framework i ma poprawną referencję, ewentualnie zmigruj kod do nowszych alternatyw (HttpClient, WCF Connected Services, CoreWCF) lub doinstaluj/nareperuj .NET Framework 4.x i dodaj bindingRedirect.
Szczegółowa analiza problemu
- Geneza błędu
• System.Web.Services.dll jest częścią .NET Framework (≥ 4.0) i nigdy nie została przeniesiona do .NET (Core)/.NET 5+.
• Podczas ładowania CLR szuka biblioteki w katalogu aplikacji, następnie w GAC. Jeżeli żądanego zestawu nie ma lub wersja jest niewłaściwa – wyrzuca FileLoadException.
- Typowe scenariusze:
a) Projekt przeniesiony do .NET 6+ (SDK‑style) zawiera stary kod SOAP → runtime nie znajdzie biblioteki.
b) Masz projekt .NET Framework, ale na serwerze nie ma Frameworka 4.x (lub instalacja jest uszkodzona).
c) W rozwiązaniu występuje konflikt wersji (bindingRedirect wymuszający 4.0.0.0, a w bin leży 2.0.0.0).
- Ścieżka diagnostyczna
• Sprawdź właściwość Target Framework w pliku .csproj/.vbproj (powinno być net48, a nie net6.0).
• Fusion Log Viewer (fuslogvw.exe) pokaże dokładnie, gdzie CLR szukał DLL‑ki.
• W GAC (C:\Windows\Microsoft.NET\assembly\GACMSIL\System.Web.Services\4.0.0.0…) potwierdź obecność biblioteki; w razie braku – napraw/instaluj Framework.
• W Visual Studio → References → System.Web.Services → Copy Local = True, jeśli aplikacja powinna wozić DLL „własnoręcznie” (np. click‑once).
- Kiedy nie da się załadować (projekty .NET Core/5‑8)
• System.Web.Services.dll wprawdzie można dodać jako reference assembly, ale przy uruchomieniu zostanie odrzucona (platform not supported).
• Rozwiązania migracyjne:
– do prostych wywołań HTTP(S): HttpClient
, System.Text.Json
/Newtonsoft.Json
.
– klient SOAP: dotnet-svcutil
, SoapCore
, CoreWCF
(open‑source fork WCF).
– dla serwerowej strony SOAP: host starych usług w procesie IIS na .NET Framework, a aplikację właściwą utrzymywać w .NET 6+.
Aktualne informacje i trendy
- Microsoft od .NET 5+ oficjalnie oznaczył wszystkie przestrzenie nazw
System.Web.*
jako legacy; rekomenduje migrację do REST lub CoreWCF (GA 2023‑12).
- .NET 8 (listopad 2023) wprowadza AOT i trimming – biblioteki Frameworkowe mogą być obcinane; manualne dopisanie
System.Web.Services
nie zadziała.
- NuGet
System.Web.Services
nie jest utrzymywany; w Community Toolkit pojawiły się translatory SOAP→REST, jednak nadal dominuje migracja do HTTP/JSON.
Wspierające wyjaśnienia i detale
Aspekty etyczne i prawne
- SOAP nadal bywa wymagany w e‑administracji (np. JPK VAT w PL); wymusza utrzymywanie starych bibliotek.
- Utrzymanie projektu na nieobsługiwanej wersji Frameworka może rodzić ryzyko bezpieczeństwa (EOL dla .NET 4.5/4.6).
- Licencjonowanie: .NET Framework jest darmowy, ale redistribucja własna DLL z niezgodną wersją może łamać postanowienia EULA (nie modyfikować plików Microsoft).
Praktyczne wskazówki
- Jeśli projekt ma zostać na .NET Framework:
• Zainstaluj/napraw .NET 4.8 na serwerze.
• W VS: dodaj referencję, CopyLocal = True
, oczyść/rebuild.
- Jeśli chcesz być cross‑platform:
• Usuń odwołania do System.Web.Services
.
• Wygeneruj klienta SOAP:
dotnet tool install --global dotnet-svcutil
dotnet-svcutil https://adresSerwisu?wsdl
• Zastąp klasę SoapHttpClientProtocol
własnym wrapperem na HttpClient
.
- Deployment CI/CD: w pipeline dodaj krok
nuget restore
i msbuild /p:CopyLocalLockFileAssemblies=true
, aby DLL‑ki trafiały do paczki.
Ewentualne zastrzeżenia lub uwagi dodatkowe
Sugestie dalszych badań
- Ocena kosztu migracji SOAP→REST vs utrzymanie .NET Framework (TCO).
- CoreWCF 1.5 – produkcyjna gotowość, kompatybilność z dokumentacją WCF.
- Monitorowanie roadmapy .NET 9 (zapowiedzi Microsoft Build 2024) – planowane narzędzia ułatwiające porting SOAP.
- Publikacje:
• Microsoft “Porting third‑party .NET Framework libraries to .NET 7” (2023)
• eBook “Modernizing ASP.NET Apps to Azure” (2024 ed.).
Krótkie podsumowanie
Błąd wynika z braku lub nieobsługiwalności System.Web.Services.dll.
1) Jeśli używasz .NET Framework – dodaj referencję, napraw instalację, ewentualnie bindingRedirect.
2) Jeśli projekt jest .NET Core/5‑8 – biblioteka nie zadziała; przejdź na alternatywy (HttpClient, CoreWCF, dotnet‑svcutil).
Zanim skopiujesz DLL ręcznie, sprawdź target framework i GAC, a diagnostykę rozpocznij od fuslogvw.exe.
Zastrzeżenie: Odpowiedzi udzielone przez sztuczną inteligencję (model językowy) mogą być niedokładne i wprowadzające w błąd. Elektroda nie ponosi odpowiedzialności za dokładność, rzetelność ani kompletność prezentowanych informacji. Wszystkie odpowiedzi powinny być zweryfikowane przez użytkownika.