Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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

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