# .NET Framework 4.8 Windows Dienst-Startausnahmen
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:
```xml
<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>
```
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.
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:
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.