Entschuldigung, wenn das eine sehr naive Frage ist. Ich habe vor einiger Zeit eine Windows Form-Anwendung mit .Net 4.5 geschrieben. Vor kurzem dachte ich, es wäre eine gute Idee, es in eine .Net Standard 2.0 Anwendung mit VS Code zu portieren.Portieren von Windows Forms zu .Net-Standard 2.0
Es gab ein paar Probleme mit fehlenden Bibliotheken und Klassen (System.ServiceModel ist die größte Lücke), aber ich habe es geschafft, die Anwendung erfolgreich zu erstellen. Allerdings, wenn ich komme, um sie auszuführen, sehe ich die folgenden Fehler:
Unhandled Exception: System.BadImageFormatException: Could not load file or assembly 'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context. (Exception from HRESULT: 0x80131058) ---> System.BadImageFormatException: Cannot load a reference assembly for execution.
Hier ist die Projektdatei, wenn es sinnvoll ist:
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<PackageReference Include="log4net" Version="2.0.8" />
<PackageReference Include="Microsoft.CSharp" Version="4.4.0" />
<PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
<PackageReference Include="NUnit" Version="3.8.1" />
<PackageReference Include="System.CodeDom" Version="4.4.0" />
<PackageReference Include="System.Configuration" Version="2.0.5" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="4.4.0" />
<PackageReference Include="System.Net.Http" Version="4.3.3" />
<PackageReference Include="System.ServiceModel" Version="1.0.0" />
<PackageReference Include="System.ServiceModel.Security" Version="4.4.0" />
<PackageReference Include="System.Windows.Forms" Version="4.0.0.0" />
</ItemGroup>
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
</Project>
Gibt es eine Möglichkeit, die Anwendung unter Verwendung der System.Windows läuft .Forms-Bibliothek, oder sollte ich es durch eine andere Bibliothek für .Net Standard 2.0 ersetzen?
"Vor kurzem dachte ich, es wäre eine gute Idee, es in eine .Net Standard 2.0-Anwendung mit VS-Code zu portieren." Das ist nur eine gute Idee, wenn Windows Forms vollständig unter Linux und Mac unterstützt wird. Das heißt, möglicherweise nie und schon gar nicht bald. Das .NET Framework wird nicht verschwinden. Anwendungen, die immer noch stark an Windows gebunden sind, sollten sie weiterhin verwenden. Wenn Sie portieren, um zu portieren, tun Sie das nicht. Wenn Sie portieren, weil Sie möchten, dass es anderswo läuft, werfen Sie einen Blick auf Mono. –
Winforms ist nicht in .net-Kern verfügbar (der Hauptzweck ist plattformübergreifende .net-Entwicklung) und es ist sehr wahrscheinlich, dass es nie (zumindest nicht in naher Zukunft). – Evk
Übrigens, Refactoring-Code, der keine Abhängigkeiten von Forms zu einer .NET Standard-Bibliothek * hat, ist * lohnenswert. Dies maximiert die Wiederverwendbarkeit eines solchen Codes. Standard-Anwendungscode, der an keiner anderen Stelle verwendet wird, ist nicht von Vorteil (es sei denn, Sie müssen ihn erneut auf anderen Plattformen ausführen). –