Skip to content

Compilation

Łukasz Domeradzki edited this page Nov 22, 2021 · 151 revisions

Compilation

Compilation is the process of creating executable file. This is what you want to do if you want to add your own changes to ASF, or if you for whatever reason don't trust executable files provided in official releases. If you're user and not a developer, most likely you want to use already precompiled binaries, but if you'd like to use your own ones, or learn something new, continue reading.

ASF can be compiled on any currently supported platform, as long as you have all needed tools to do so.


.NET SDK

Regardless of platform, you need full .NET SDK (not just runtime) in order to compile ASF. Installation instructions can be found on .NET download page. You need to install appropriate .NET SDK version for your OS. After successful installation, dotnet command should be working and operative. You can verify if it works with dotnet --info. Also ensure that your .NET SDK matches ASF runtime requirements.


Compilation

Assuming you have .NET SDK operative and in appropriate version, simply navigate to source ASF directory (cloned or downloaded and unpacked ASF repo) and execute:

dotnet publish ArchiSteamFarm -c "Release" -f "net6.0" -o "out/generic"

If you're using Linux/OS X, you can instead use cc.sh script which will do the same, in a bit more complex manner.

If compilation ended successfully, you can find your ASF in source flavour in out/generic directory. This is the same as official generic ASF build, but it has forced UpdateChannel and UpdatePeriod of 0, which is appropriate for self-builds.

OS-specific

You can also generate OS-specific .NET package if you have a specific need. In general you shouldn't do that because you've just compiled generic flavour that you can run with your already-installed .NET runtime that you've used for the compilation in the first place, but just in case you want to:

dotnet publish ArchiSteamFarm -c "Release" -f "net6.0" -o "out/linux-x64" -r "linux-x64"

Of course, replace linux-x64 with OS-architecture that you want to target, such as win-x64. This build will also have updates disabled.

.NET Framework

In a very rare case when you'd want to build generic-netf package, you can change target framework from net6.0 to net48. Keep in mind that you'll need appropriate .NET Framework developer pack for compiling netf variant, in addition to .NET SDK, so the below will work only on Windows:

dotnet publish ArchiSteamFarm -c "Release" -f "net48" -o "out/generic-netf"

In case of being unable to install .NET Framework or even .NET SDK itself (e.g. because of building on linux-x86 with mono), you can call msbuild directly. You'll also need to specify ASFNetFramework manually, as ASF by default disables netf build on non-Windows platforms:

msbuild /m /r /t:Publish /p:Configuration=Release /p:TargetFramework=net48 /p:PublishDir=out/generic-netf /p:ASFNetFramework=true ArchiSteamFarm

ASF-ui

While the above steps are everything that is required to have a fully working build of ASF, you may also be interested in building ASF-ui, our graphical web interface. From ASF side, all you need to do is dropping ASF-ui build output in standard ASF-ui/dist location, then building ASF with it (again, if needed).

ASF-ui is part of ASF's source tree as a git submodule, ensure that you've cloned the repo with git clone --recursive, as otherwise you'll not have the required files. You'll also need a working NPM, Node.js comes with it. If you're using Linux/OS X, we recommend our cc.sh script, which will automatically cover building and shipping ASF-ui (if possible, that is, if you're meeting the requirements we've just mentioned).

In addition to the cc.sh script, we also attach the simplified build instructions below, refer to ASF-ui repo for additional documentation. From ASF's source tree location, so as above, execute the following commands:

npm ci --no-progress --prefix ASF-ui
npm run-script deploy --no-progress --prefix ASF-ui

rm -rf "out/generic/www" # Ensure that our build output is clean of the old files
dotnet publish ArchiSteamFarm -c "Release" -f "net6.0" -o "out/generic" # Or accordingly to what you need as per above

You should now be able to find the ASF-ui files in your out/generic/www folder. ASF will be able to serve those files to your browser.

Alternatively, you can simply build ASF-ui, whether manually or with the help of our repo, then copy the build output over to ${OUT}/www folder manually, where ${OUT} is the output folder of ASF that you've specified with -o parameter.


Development

If you'd like to edit ASF code, you can use any .NET compatible IDE for that purpose, although even that is optional, since you can as well edit with a notepad and compile with dotnet command described above. Still, for Windows we recommend latest Visual Studio (free community version is more than enough).

If you'd like to work with ASF code on Linux/OS X instead, we recommend latest Visual Studio Code. It's not as rich as classic Visual Studio, but it's good enough.

Of course all suggestions above are only recommendations, you can use whatever you want to, it comes down to dotnet build command anyway. We use JetBrains Rider for ASF development, although it's not a free solution.


Tags

main branch is not guaranteed to be in a state that allows successful compilation or flawless ASF execution in the first place, since it's development branch just like stated in our release cycle. If you want to compile or reference ASF from source, then you should use appropriate tag for that purpose, which guarantees at least successful compilation, and very likely also flawless execution (if build was marked as stable release). In order to check the current "health" of the tree, you can use our CI - GitHub.


Official releases

Official ASF releases are compiled by GitHub on Windows, with latest .NET SDK that matches ASF runtime requirements. After passing tests, all packages are deployed as the release, also on GitHub. This also guarantees transparency, since GitHub always uses official public source for all builds, and you can compare checksums of GitHub artifacts with GitHub release assets. ASF developers do not compile or publish builds themselves, except for private development process and debugging.

Clone this wiki locally