xnb files

Hi

After adding files to the content pipeline and running my program, I now have a “content” folder containing *.xnb files (with same file name as the files I added in the content pipeline tool).
What are those files and are they needed to run my program?

XNB files are easier for a GPU to read than a PNG or something like that. A graphics device can’t read a .png directly, so the time and processing it would take to open and render this would be slower because the .png file would have to be decompressed into raw bytes. That’s why we use .xnb and not .png directly.

So if I want to run my exe of my game on a pc without monogame package installed, I need to copy this content folder with all xnb files inside too?(and all DLL files?)
Or is more needed?

Not sure if i understand you well, but once you publish your game, all of your files (code, images, audio, etc) will be compiled in together in the same exe file… so you wouldn’t need to copy anything when you publish the game.

If you wanna know what to do if you’re going to work on another pc, then yes, you’d need to have a backup of your files to import in your other instance of Visual Studio in another computer.

XNB files are content files (images, models, sounds, fonts, etc) that have been processed by the content pipeline. There are those who are opposed to MonoGame’s content pipeline, which is modelled after XNA. However, if you’re a beginner, you’re probably not ready to attempt implementing your own content processing pipeline or procedure. I’m not exactly a beginner and I’m still using MonoGame’s content pipeline, for what it’s worth.

XNB files can be read directly by MonoGame’s ContentManager. In your LoadContent method, if you want to load a 2D texture you simply call Texture2D whatever = Content.Load<Texture2D>("example");, where “example” is the name of the XNB file sans extension (no “.xnb” appended to it). If you load content in this manner, for the game to run, the XNB files would need to be in the same directory as your application executable, typically in a subdirectory named “Content”.

The line of code that sets the subdirectory containing the content files looks like this:

Content.RootDirectory = "Content";

Ah I didn’t know that!

Can you tell me how to make this exe that contains everything?

For now my visual studio compiles the exe but I have the dll files and xnb files next to it.

That’s normal (though the XNB files are usually in a subdirectory named “Content”). I don’t think most games are packaged into a single monolithic executable file, though I believe it is possible. However, I haven’t attempted it and I don’t know how to do it.

Ok, so the opinions here of people are different.

If anybody knows how to make the exe contain everything, I want to know!

But if I copy the whole “release” folder of visual studio containing exe, dll files and “content” folder, it should run on a pc without visual studio? Or do I need to copy more things from other folders on my pc?
(I’m using desktop opengl monogame project only)

Yes, with the caveat that the end user on the other PC may need to install the appropriate .NET runtime on their computer. At least with .NET 6, if the runtime isn’t installed, I believe a window will pop up prompting the user to download it before the game can be run. I think it’s possible to package the runtime with your game as well, so that it doesn’t have to be downloaded on the other computer, though that will significantly increase the total size of the game.

Ok I understand! The .NET runtime is fine to be installed by the user.

Also all other (possible) nuget packages I install using visual studio: will visual studio copy the required DLL files next to the exe so I have everything for those ‘extra’ packages I maybe will use?

Yes, I believe that’s how it works, though I’m by no means an expert with Nuget. I recently reinstalled Windows and managed to break my current project as a result, because I couldn’t get the MonoGame Nuget files to work right afterward. I ended up having to build MonoGame from source to get my game working again. So yeah, I’m not exactly experienced with Nuget.

There is an option in Visual Studio to publish everything as a single file.
It produces a much larger exe file but eliminiates the need for the target PC to have the required .NET dlls etc installed before the game will work as they are all put into the single file.

Instructions for Visual Studio 2022:

From the menus:
Build —> Publish Selection
Select “Folder” (Publish your application to a local folder or file share)
Click NEXT
Select “Folder” (Publish your application to a local folder or file share)
Click NEXT
Choose the destination folder.
Click Finish

This creates a new publish profile:

Click “Show All Settings”
Change deployment mode to “self contained”
Click the circle next to File publish options.
Check the “Produce a single file” checkbox.

Click the Publish button at the top at that will produce the single file executable in the target location you specified.

Will it include the XNB files of monogame too inside the EXE or just the DLL files only?

for what game/program?
many games/programs have a “content patcher” that overlays a png instead of an xnb file making modding much easier

It puts everything into a single exe file.
For an example see my game here :smiley::