Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kant2002/winformscominterop
ComWrappers required to run NativeAOT and WinForms
https://github.com/kant2002/winformscominterop
aot corert csharp-sourcegenerator nativeaot winforms
Last synced: 6 days ago
JSON representation
ComWrappers required to run NativeAOT and WinForms
- Host: GitHub
- URL: https://github.com/kant2002/winformscominterop
- Owner: kant2002
- License: mit
- Created: 2020-02-18T18:36:04.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2023-09-29T09:24:10.000Z (about 1 year ago)
- Last Synced: 2024-04-27T06:21:22.040Z (7 months ago)
- Topics: aot, corert, csharp-sourcegenerator, nativeaot, winforms
- Language: C#
- Homepage:
- Size: 701 KB
- Stars: 189
- Watchers: 8
- Forks: 26
- Open Issues: 27
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE.TXT
Awesome Lists containing this project
README
ComWrappers required to run NativeAOT and WinForms
=====================================================This repository has ComWrappers implementation for WinForms.
In additional to that, it allow use WinForms and NativeAOT and R2R with trimming together.## Getting started
Just add `WinFormsComInterop` to your project.
dotnet add package WinFormsComInterop
Then to your Program.cs add following line
ComWrappers.RegisterForMarshalling(WinFormsComInterop.WinFormsComWrappers.Instance);
And modify project file to enable NativeAOT
```
true
<_SuppressWinFormsTrimError>true
```If you application will works with this ComWrappers implementation, then most likely it would work with NativeAOT.
If you are using WebView2 using `Microsoft.Web.WebView2.Core` package, then use
ComWrappers.RegisterForMarshalling(WinFormsComInterop.WebView2.WebView2ComWrapper.Instance);
Note, that it does not working for *new* WebView2 as of .NET 8, please file and issue if you need it, I'll prioritize.
Also
1. Add `` as depedency. This library would work only starting from this version of WebView2 package.
2. Add RD.xml file from https://github.com/kant2002/RdXmlLibrary/blob/main/Microsoft.AspNetCore.Components.Web.rd.xml to project
3. Add `` to project file
4. Make sure that RootComponets are added to you app-specific rd.xml
```xml
```
## Testing technology
Test that normal CoreCLR works
dotnet run --project samples\SampleWindowsForms\SampleWindowsForms.csproj
dotnet run --project experiments\WpfTestBed\WpfTestBed.csproj
dotnet run --project experiments\WinUITestBed\WinUITestBed\WinUITestBed.csproj
dotnet run --project experiments\WinUIUWP\WinUIUWP.csproj## NativeAOT
Test that NativeAOT works.
Run commands in x64 developer tools.### WinForms
dotnet publish -r win-x64 samples\SampleWindowsForms\SampleWindowsForms.csproj
"samples\SampleWindowsForms\bin\x64\Debug\net6.0-windows\win-x64\publish\SampleWindowsForms.exe"Below are experimental projects. They are need additional work.
### WPF
dotnet publish -r win-x64 experiments\WpfTestBed\WpfTestBed.csproj -p:GenerateWPF=true
blocked by https://github.com/kant2002/WinFormsComInterop/issues/30
### WinUI
dotnet publish -r win10-x64 experiments\WinUITestBed\WinUITestBed\WinUITestBed.csproj
### Classic UWP project
dotnet publish -r win-x64 experiments\WinUIUWP\WinUIUWP.csproj
does not working due to this error
```
experiments\WinUIUWP\WinUIUWP.csproj : error MSB4057: The target "Restore" does not exist in the project.
```## For brave souls
Mostly notes for me, but maybe somebody would like to hack.
Build [NativeAOT](https://github.com/dotnet/runtimelab/tree/feature/NativeAOT).
Modify nuget.config
```
```
Restore packages to local folder to not pollute global Nuget cache. You will build NativAOT a lot.
dotnet restore -r win-x64 --packages packages
Then publish applications using regular workflow described above.
# Additional reading
Design of future stubs in Runtime
- https://github.com/dotnet/runtimelab/blob/feature/DllImportGenerator/designs/Pipeline.md#stub-code-generation