I was wondering, is there a specific reason to not have an option in the Application Exporter window to set the self-contained flag?
Our Reason
We had an apprentice in our studio and he will need to make a presentation for school. We exported what he did so he could show it to his class.
Turns out, he could not run the exported application on the school machines.
The IT guys at school forbid to install anything on the machine, so they can’t download .NET to make it work.
So we exported again by copying the dotnet publish command line and manually setting the self-contained flag to True instead of False, like it is described in the gray book to export to Linux, or in the .NET documentation.
It works, but now I am asking myself : why is this not an option which we could simply set via a checkbox?
Another use case
When we have to provide to a client a prototype or an app version, exporting with self-contained flag set to True would make things easier: they won’t have to call us because a pop-up asking to download .NET appears.
They usually have no knowledge about it, and the easier it is for them to start the app, the easier it is for us to work ;)
Issue found
An app which loads a Stride project with LoadProject does not behave correctly if exported with self-contained flag from my research.
I could notice that it creates a new Stride window / renderer every 3 seconds, and it stacks them.
I don’t know if this is a vvvv or Stride issue though.
I set this with the Question flag on the forum, but maybe it could have the Feature flag one day!
If your application is referencing VL.Stride, make sure the target PC also has the following dependencies installed:
Microsoft Visual C++ Redistributables: 64bit or 32bit
.NET8 SDK (For FileTexture and FileModel nodes to work)
Needed to send an exported app to client lately. He said it was not starting at all.
Had to send him both theses links and it apparently worked (not heard back from him at least)
Not sure if he had to install both. The app is using FileTexture so he had to install the .net SDK probably.
Is there no way to avoid the SDK? It feels kind of too much to ask for, just to run an app.
Also the C++ redist link might look sketchy to some folks.. https:\\aka.ms… (great naming microsoft!)
There is no easy way here, application meant to work in environments, environments require environment level dependencies..
The easiest would be likely to package your app with something like Inno Setup
Then you can bundle dependencies with a package…
Or check how the GammaLauncher does that.
There are many ways, but problem is it’s a separate step after compilation…
The worst part that there was the containerization hype, and most of the apps that coming with windows are now containerized. The containerized app adds additional challenges like filesystem not directly accessible, to use any type of connection or device you need a capability and manifest… So on windows 12 it maybe even worse then now…
Oops, this Action is outdated and should be deleted. I just wrote it in order to “try later” but in the end I’m doing the whole thing locally with Nuke.
I randomly stumbled upon https://velopack.io/ the other day. Did not have a chance yet to try, but I think it would already cover our basics, like .NET SDK and VC++ redist. Promises to be a one-click self-updating installer very easy to setup for a dotnet app - like our exports are.
Started playing with Velopack and vvvv, I’m documenting my findings here
As written in the Steps section, I put their bootstrap function in IStartup but it gently tells me this is probably not what I’m supposed to do:
VelopackApp.Run() was found in method '_StupidSimpleClock_.Main.Startup_C
_StupidSimpleClock_.Main.Startup_C::Configure_(VL.Core.AppHost)', which does not look like your application's entry
point. It is strongly recommended that you move this to the very beginning of your Main() method.
This is how they do it in their docs, my assumption was that that function should run as soon as possible so I put it in Configure, but maybe there’s a better way?
static void Main(string[] args)
{
VelopackApp.Build().Run();
// ... your other startup code below
}
.. and most importantly should we move that to a different topic ? 🙃
This quite complicated topic in terms of vvvv does not have single entry point. The first thing I would try is something like:
public static class Intialization
{
private static YourFunctionResult? _instance;
public static YourFunctionResult Current
{
get
{
if (_instance is null)
_instance = YourFunctionCall();
return _instance;
}
}
}