.NET Framework 4.8 Windows Dienst-Startausnahmen

Curtis Chau
Curtis Chau
Updated: 10. Juni 2026

Ein IronPDF .NET Framework 4.8 Windows Service Projekt löst FileNotFoundException aus, wenn ChromePdfRenderer konstruiert wird, oder StackOverflowException, wenn der Lizenzschlüssel gesetzt wird. Der gleiche Code funktioniert korrekt in einem Konsolen- oder WinForms-Host.

Die Fassadeerkennung von MSBuild verhindert, dass sechs von NuGet bereitgestellte Assemblys in das Ausgabeverzeichnis kopiert werden: System.ValueTuple, System.Buffers, System.Threading.Tasks.Extensions, System.Text.Json, System.Text.Encodings.Web und System.Text.Encoding.CodePages. MSBuild geht davon aus, dass die in-box .NET 4.8-Versionen dieser Assemblys den NuGet-Versionen entsprechen, aber die Binding-Redirects in App.config erfordern die NuGet-Versionen. Die fehlenden Dateien verursachen die Ausnahme beim Start.

Lösung

Option 1: Migration zu PackageReference (Empfohlen)

Rechtsklicken Sie in Visual Studio auf packages.config und wählen Sie Pakete.config in PackageReference migrieren. Verifizieren Sie, dass <AutoGenerateBindingRedirects> in der .csproj Datei aktiviert ist, und bauen Sie dann neu auf. Die MSBuild-Integration von PackageReference führt nicht zu dem Fassade-Überspringen-Verhalten.

Option 2: Erzwingen der Kopie von Fassade-DLL mit einem Nachbauziel

Falls das Beibehalten von packages.config erforderlich ist, fügen Sie dieses MSBuild-Ziel zur .csproj Datei hinzu:

<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

Passen Sie die Versionsnummern an, um mit den exakten Versionen übereinzustimmen, die in Ihrem packages Verzeichnis wiederhergestellt wurden.

Das Setzen von <Private>True</Private> (Copy Local) auf Fassadeverweise löst das Problem nicht; Die Fassade-Erkennung von MSBuild blockiert weiterhin den Kopiervorgang.

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender Handbücher.

Weiterlesen

Bereit anzufangen?

Nuget Downloads 21,739,885Version:2026.10gerade veröffentlicht