Wyjątki startowe usługi Windows w .NET Framework 4.8

This article was translated from English: Does it need improvement?
Translated
View the article in English

Projekt usługi Windows IronPDF .NET Framework 4.8 rzuca FileNotFoundException podczas tworzenia ChromePdfRenderer lub StackOverflowException podczas ustawiania klucza licencyjnego. Ten sam kod działa poprawnie w konsoli lub hostingu WinForms.

Logika wykrywania fasad przez MSBuild uniemożliwia skopiowanie sześciu zestawów dostarczonych przez NuGet do katalogu wyjściowego: System.ValueTuple, System.Buffers, System.Threading.Tasks.Extensions, System.Text.Json, System.Text.Encodings.Web i System.Text.Encoding.CodePages. MSBuild zakłada, że wbudowane wersje .NET 4.8 tych zestawów są równoważne wersjom NuGet, ale przekierowania powiązań w App.config wymagają wersji NuGet. Brakujące pliki powodują wyjątek podczas startu.

Rozwiązanie

Opcja 1: Migracja do PackageReference (Zalecane)

Kliknij prawym przyciskiem na packages.config w Visual Studio i wybierz Migruj packages.config do PackageReference. Zweryfikuj, czy <AutoGenerateBindingRedirects> jest włączony w pliku .csproj, a następnie odbuduj. Integracja MSBuild z PackageReference nie wywołuje zachowania pomijania fasady.

Opcja 2: Wymuś kopiowanie DLL fasady za pomocą celu AfterBuild

Jeśli konieczne jest zachowanie packages.config, dodaj ten cel MSBuild do pliku .csproj:

<Target Name="CopyFacadeAssemblies" AfterTargets="Build">
    <ItemGroup>
        <FacadeAssemblies Include="..\packages\System.Buffers.4.5.1\lib\netstandard2.0\System.Buffers.dll" />
        <FacadeAssemblies Include="..\packages\System.Text.Encodings.Web.6.0.1\lib\net461\System.Text.Encodings.Web.dll" />
        <FacadeAssemblies Include="..\packages\System.Text.Json.6.0.11\lib\net461\System.Text.Json.dll" />
        <FacadeAssemblies Include="..\packages\System.Text.Encoding.CodePages.5.0.0\lib\net461\System.Text.Encoding.CodePages.dll" />
        <FacadeAssemblies Include="..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll" />
        <FacadeAssemblies Include="..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll" />
    </ItemGroup>
    <Copy SourceFiles="@(FacadeAssemblies)" DestinationFolder="$(OutputPath)" SkipUnchangedFiles="true" />
</Target>
<Target Name="CopyFacadeAssemblies" AfterTargets="Build">
    <ItemGroup>
        <FacadeAssemblies Include="..\packages\System.Buffers.4.5.1\lib\netstandard2.0\System.Buffers.dll" />
        <FacadeAssemblies Include="..\packages\System.Text.Encodings.Web.6.0.1\lib\net461\System.Text.Encodings.Web.dll" />
        <FacadeAssemblies Include="..\packages\System.Text.Json.6.0.11\lib\net461\System.Text.Json.dll" />
        <FacadeAssemblies Include="..\packages\System.Text.Encoding.CodePages.5.0.0\lib\net461\System.Text.Encoding.CodePages.dll" />
        <FacadeAssemblies Include="..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll" />
        <FacadeAssemblies Include="..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll" />
    </ItemGroup>
    <Copy SourceFiles="@(FacadeAssemblies)" DestinationFolder="$(OutputPath)" SkipUnchangedFiles="true" />
</Target>
XML

Dostosuj numery wersji, aby pasowały do dokładnych wersji przywróconych w katalogu packages.

Ustawienie <Private>True</Private> (Copy Local) dla odwołań fasadowych nie rozwiązuje problemu; Detekcja fasady MSBuild nadal blokuje krok kopiowania.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 20,088,359 | Wersja: 2026.7 właśnie wydany
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package IronPdf
Uruchom przykład i zobacz, jak Twój kod HTML zamienia się w plik PDF.