<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.rage.mp/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vula</id>
	<title>RAGE Multiplayer Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.rage.mp/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vula"/>
	<link rel="alternate" type="text/html" href="https://wiki.rage.mp/wiki/Special:Contributions/Vula"/>
	<updated>2026-07-18T18:42:33Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://wiki.rage.mp/w/index.php?title=Development_with_Visual_Studio_Code&amp;diff=19943</id>
		<title>Development with Visual Studio Code</title>
		<link rel="alternate" type="text/html" href="https://wiki.rage.mp/w/index.php?title=Development_with_Visual_Studio_Code&amp;diff=19943"/>
		<updated>2020-08-16T06:39:47Z</updated>

		<summary type="html">&lt;p&gt;Vula: /* Setting Up Project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial explains a basic to develop &amp;amp; debug a RAGE-MP resource / server-side script using [[wikipedia:Visual_Studio_Code|VSCode]] on C# bridge&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: it is not required for you to compile the .cs scripts to run the resource, you can let the server compile them when server starts.&lt;br /&gt;
[[#Client-side|See the comparison below]].&lt;br /&gt;
&lt;br /&gt;
This tutorial will mainly describe about compiling your server-side resource into &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt; binary which you can attach a debugger on it. A similar step can be also done in [[wikipedia:Visual Studio|Visual Studio IDE]], except the launch &amp;amp; task part.&lt;br /&gt;
&lt;br /&gt;
== Requirement ==&lt;br /&gt;
* Visual Studio Code - [https://code.visualstudio.com/download Download]&lt;br /&gt;
* .NET Core SDK version 2.2 - [https://dotnet.microsoft.com/download/dotnet-core/2.2 Download] (As of RAGE:MP 0.3.7, Server side uses version 2.0.3 and Client side uses version 2.2.0 so it&#039;s safe to install the latest which are backward compatible)&lt;br /&gt;
* C# Extension for Visual Studio Code powered by OmniSharp - [https://marketplace.visualstudio.com/items?itemName=ms-vscode.csharp Download (in Visual Studio Code)]&lt;br /&gt;
&lt;br /&gt;
== Setting Up Project ==&lt;br /&gt;
# Open Visual Studio Code on &#039;&#039;&#039;bridge/resources&#039;&#039;&#039; folder&lt;br /&gt;
# Create a new folder, example &#039;&#039;&#039;mygamemode&#039;&#039;&#039; then select the folder&lt;br /&gt;
# Open the terminal &amp;lt;kbd&amp;gt;&#039;&#039;&#039;Ctrl&#039;&#039;&#039;&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;&#039;&#039;&#039;`&#039;&#039;&#039;&amp;lt;/kbd&amp;gt; (control + tilde)&lt;br /&gt;
# Enter &amp;lt;tt&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;code&amp;gt;dotnet new classlib -f netcoreapp2&amp;lt;/code&amp;gt; to create a new .NET Core class library&lt;br /&gt;
# A &amp;lt;tt&amp;gt;.csproj&amp;lt;/tt&amp;gt; file will be created, click to edit it&lt;br /&gt;
## [https://docs.microsoft.com/en-us/dotnet/standard/frameworks#how-to-specify-target-frameworks Change the TargetFramework] to &amp;lt;code&amp;gt;netcoreapp2.0&amp;lt;/code&amp;gt;&lt;br /&gt;
## [https://docs.microsoft.com/en-us/dotnet/core/versions/selection#self-contained-deployments-include-the-selected-runtime Set the RuntimeFrameworkVersion] to 2.0.3&lt;br /&gt;
## Include &amp;lt;tt&amp;gt;GTANetworkAPI&amp;lt;/tt&amp;gt; by adding reference to &#039;&#039;&#039;dotnet/runtime/Bootstrapper.dll&#039;&#039;&#039;&lt;br /&gt;
## Your &amp;lt;tt&amp;gt;mygamemode.csproj&amp;lt;/tt&amp;gt; should look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;Project Sdk=&amp;quot;Microsoft.NET.Sdk&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;PropertyGroup&amp;gt;&lt;br /&gt;
    &amp;lt;TargetFramework&amp;gt;netcoreapp2.0&amp;lt;/TargetFramework&amp;gt;&lt;br /&gt;
    &amp;lt;RuntimeFrameworkVersion&amp;gt;2.0.3&amp;lt;/RuntimeFrameworkVersion&amp;gt;&lt;br /&gt;
  &amp;lt;/PropertyGroup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;PropertyGroup Condition=&amp;quot;&#039;$(Configuration)|$(Platform)&#039;==&#039;Debug|AnyCPU&#039;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch&amp;gt;None&amp;lt;/ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch&amp;gt;&lt;br /&gt;
  &amp;lt;/PropertyGroup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;ItemGroup&amp;gt;&lt;br /&gt;
    &amp;lt;Reference Include=&amp;quot;GTANetworkAPI&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;HintPath&amp;gt;..\..\runtime\Bootstrapper.dll&amp;lt;/HintPath&amp;gt; &amp;lt;!-- Or absolute path to your X:/RAGEMP/server-files/dotnet/runtime/Bootstrapper.dll --&amp;gt;&lt;br /&gt;
      &amp;lt;Private Condition=&amp;quot;&#039;$(Configuration)|$(Platform)&#039;==&#039;Release|AnyCPU&#039;&amp;quot;&amp;gt;False&amp;lt;/Private&amp;gt;&lt;br /&gt;
    &amp;lt;/Reference&amp;gt;&lt;br /&gt;
  &amp;lt;/ItemGroup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/Project&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Save the files and enter in terminal: &amp;lt;tt&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;code&amp;gt;dotnet restore&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Setting up Launch and Task command ==&lt;br /&gt;
Visual Studio Code comes with two kind of project commands: &#039;&#039;&#039;launch.json&#039;&#039;&#039; and &#039;&#039;&#039;tasks.json&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These commands are saved inside a .vscode folder of your project, so you have to do this on every different projects you created.&lt;br /&gt;
&lt;br /&gt;
=== launch.json ===&lt;br /&gt;
The launch command is used for running server debug with &amp;lt;kbd&amp;gt;F5&amp;lt;/kbd&amp;gt; key (or from &#039;&#039;&#039;Debug&#039;&#039;&#039; menu) later&lt;br /&gt;
&lt;br /&gt;
# Proceed to Debugging Tab (&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;D&amp;lt;/kbd&amp;gt;)&lt;br /&gt;
# Click the Gear button (next to DEBUG button) to configure the &amp;lt;tt&amp;gt;launch.json&amp;lt;/tt&amp;gt;, select &#039;&#039;.NET Core&#039;&#039; or &#039;&#039;Others&#039;&#039;&lt;br /&gt;
# Modify the configuration like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    // Use IntelliSense to learn about possible attributes.&lt;br /&gt;
    // Hover to view descriptions of existing attributes.&lt;br /&gt;
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387&lt;br /&gt;
    &amp;quot;version&amp;quot;: &amp;quot;0.2.0&amp;quot;,&lt;br /&gt;
    &amp;quot;configurations&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;name&amp;quot;: &amp;quot;RAGE-MP Launch (build)&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;coreclr&amp;quot;,&lt;br /&gt;
            &amp;quot;request&amp;quot;: &amp;quot;launch&amp;quot;,&lt;br /&gt;
            &amp;quot;preLaunchTask&amp;quot;: &amp;quot;compile&amp;quot;,&lt;br /&gt;
            &amp;quot;program&amp;quot;: &amp;quot;server.exe&amp;quot;, // The RAGEMP server executable&lt;br /&gt;
            &amp;quot;args&amp;quot;: [],&lt;br /&gt;
            &amp;quot;cwd&amp;quot;: &amp;quot;${workspaceFolder}/../../../&amp;quot;, // Or absolute path to your X:/RAGEMP/server-files/&lt;br /&gt;
            &amp;quot;stopAtEntry&amp;quot;: false,&lt;br /&gt;
            &amp;quot;console&amp;quot;: &amp;quot;externalTerminal&amp;quot;,&lt;br /&gt;
            &amp;quot;internalConsoleOptions&amp;quot;: &amp;quot;neverOpen&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Save the &amp;lt;tt&amp;gt;launch.json&amp;lt;/tt&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
=== tasks.json ===&lt;br /&gt;
We will create two kind of tasks:&lt;br /&gt;
* &#039;&#039;&#039;compile&#039;&#039;&#039; - to compile the resource into &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt;, required for debugging in launch task we created before (located in &#039;&#039;&#039;bin/Debug/&#039;&#039;&#039; by default)&lt;br /&gt;
* &#039;&#039;&#039;release&#039;&#039;&#039; - to build the end product of the resource with optimized &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt; ready to deploy &amp;amp; run in real server (located in &#039;&#039;&#039;bin/Release/&#039;&#039;&#039; by default)&lt;br /&gt;
&lt;br /&gt;
You can run these tasks by selecting &#039;&#039;&#039;Terminal&#039;&#039;&#039;&amp;gt;&#039;&#039;&#039;Run Task...&#039;&#039;&#039; later time.&lt;br /&gt;
&lt;br /&gt;
# Select on menu bar &#039;&#039;&#039;Terminal&#039;&#039;&#039;&amp;gt;&#039;&#039;&#039;Configure Tasks...&#039;&#039;&#039;, select &#039;&#039;.NET Core&#039;&#039; or &#039;&#039;Others&#039;&#039;&lt;br /&gt;
# Modify the configuration like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    // See https://go.microsoft.com/fwlink/?LinkId=733558&lt;br /&gt;
    // for the documentation about the tasks.json format&lt;br /&gt;
    &amp;quot;version&amp;quot;: &amp;quot;2.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;tasks&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;compile&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;shell&amp;quot;,&lt;br /&gt;
            &amp;quot;command&amp;quot;: &amp;quot;dotnet build&amp;quot;,&lt;br /&gt;
            &amp;quot;presentation&amp;quot;: {&lt;br /&gt;
                &amp;quot;reveal&amp;quot;: &amp;quot;silent&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;problemMatcher&amp;quot;: &amp;quot;$msCompile&amp;quot;,&lt;br /&gt;
            &amp;quot;group&amp;quot;: {&lt;br /&gt;
                &amp;quot;kind&amp;quot;: &amp;quot;build&amp;quot;,&lt;br /&gt;
                &amp;quot;isDefault&amp;quot;: true&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;promptOnClose&amp;quot;: true&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;label&amp;quot;: &amp;quot;release&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;shell&amp;quot;,&lt;br /&gt;
            &amp;quot;command&amp;quot;: &amp;quot;dotnet build -c Release&amp;quot;,&lt;br /&gt;
            &amp;quot;problemMatcher&amp;quot;: &amp;quot;$msCompile&amp;quot;,&lt;br /&gt;
            &amp;quot;group&amp;quot;: &amp;quot;build&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Save the &amp;lt;tt&amp;gt;tasks.json&amp;lt;/tt&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
== Setting Up Resource ==&lt;br /&gt;
Now you can create your script in &#039;&#039;&#039;Class1.cs&#039;&#039;&#039;, rename it if you wish (make sure the class name is also renamed)&lt;br /&gt;
&lt;br /&gt;
=== Writing the gamemode ===&lt;br /&gt;
# Add the C# server-side bridge dependency with &amp;lt;code&amp;gt;using GTANetworkAPI&amp;lt;/code&amp;gt;&lt;br /&gt;
# Extends your class to &amp;lt;tt&amp;gt;Script&amp;lt;/tt&amp;gt; API like &amp;lt;code&amp;gt;public class Class1 : Script&amp;lt;/code&amp;gt;&lt;br /&gt;
# Add &amp;lt;code&amp;gt;Hello World!&amp;lt;/code&amp;gt; code in the entry point or class constructor of the script, your code would look like this:&lt;br /&gt;
 &amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using GTANetworkAPI;&lt;br /&gt;
&lt;br /&gt;
namespace mygamemode&lt;br /&gt;
{&lt;br /&gt;
    public class Class1 : Script&lt;br /&gt;
    {&lt;br /&gt;
        public Class1()&lt;br /&gt;
        {&lt;br /&gt;
            Console.WriteLine(&amp;quot;Hello World!&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Configuring resource meta file ===&lt;br /&gt;
# Create a new file [https://wiki.gtanet.work/index.php?title=meta.xml meta.xml] in your resource folder (if not exist)&lt;br /&gt;
# Put some resource information, and add the &amp;lt;tt&amp;gt;mygamemode.dll&amp;lt;/tt&amp;gt; file&lt;br /&gt;
 &amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
    &amp;lt;info name=&amp;quot;My Gamemode&amp;quot; description=&amp;quot;My C# bridge gamemode Resource&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Uncompiled: --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- &amp;lt;script src=&amp;quot;Class1.cs&amp;quot; /&amp;gt; --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Compiled: --&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;bin/Debug/netcoreapp2.0/mygamemode.dll&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note that after running compile task, your &amp;lt;tt&amp;gt;.cs&amp;lt;/tt&amp;gt; scripts will be compiled into &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt; by default located on &amp;lt;code&amp;gt;bin/Debug/netcoreapp2.0/&amp;lt;/code&amp;gt; folder relative to your resource directory.&lt;br /&gt;
&lt;br /&gt;
If you are not sure why your &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt; does not work, try running the server with raw &amp;lt;tt&amp;gt;Class1.cs&amp;lt;/tt&amp;gt; source code (uncomment the Uncompiled and comment the Compiled script tag).&lt;br /&gt;
&lt;br /&gt;
=== Configuring bridge setting ===&lt;br /&gt;
# Edit &#039;&#039;&#039;bridge/[https://wiki.gtanet.work/index.php?title=settings.xml settings.xml]&#039;&#039;&#039; file in your server folder, add your resource like the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;config xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;acl_enabled&amp;gt;false&amp;lt;/acl_enabled&amp;gt;&lt;br /&gt;
  &amp;lt;resource src=&amp;quot;mygamemode&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Save the files.&lt;br /&gt;
&lt;br /&gt;
== Debugging the Script ==&lt;br /&gt;
When you are set up ready, it&#039;s time to build the resource!&lt;br /&gt;
&lt;br /&gt;
If there are errors on compilation, try to close the folder and re-open it in your Visual Studio Code, usually the OmniSharp server need to refresh new files.&lt;br /&gt;
&lt;br /&gt;
You can also try &amp;lt;tt&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;code&amp;gt;dotnet clean&amp;lt;/code&amp;gt; in case you have changes on the referenced files (i.e. Bootstrapper update).&lt;br /&gt;
&lt;br /&gt;
Since we have not added any gameplay code in this tutorial, we do not have to play &amp;amp; join the server.&lt;br /&gt;
&lt;br /&gt;
# Open your script Class1.cs, add a code breakpoint by clicking on the left side of the line number&lt;br /&gt;
# For example, you may want to put a pause before the server prints &amp;quot;Hello World&amp;quot; line&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; highlight=&amp;quot;10&amp;quot; start=&amp;quot;8&amp;quot; line&amp;gt;&lt;br /&gt;
        public Class1()&lt;br /&gt;
        {&lt;br /&gt;
            Console.WriteLine(&amp;quot;Hello World!&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Go to Debug tab&lt;br /&gt;
# Hit &amp;lt;kbd&amp;gt;F5&amp;lt;/kbd&amp;gt; button&lt;br /&gt;
# Your server will run, and the server threads will pause on your breakpoint line&lt;br /&gt;
# Click &#039;&#039;&#039;► Continue&#039;&#039;&#039; button (&amp;lt;kbd&amp;gt;F5&amp;lt;/kbd&amp;gt;) on top of your Visual Studio window&lt;br /&gt;
# You will get output &amp;quot;Hello World&amp;quot; in your server console.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Loading resources..&lt;br /&gt;
-&amp;gt; Starting mygamemode resource..&lt;br /&gt;
mygamemode: loading scripts...&lt;br /&gt;
mygamemode: instantiating mygamemode.Class1..&lt;br /&gt;
Hello world!&lt;br /&gt;
-&amp;gt; Resource mygamemode started!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Close the server/hit the &#039;&#039;&#039;■ Stop&#039;&#039;&#039; debugging button (&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;F5&amp;lt;/kbd&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
After you made changes to your script, you can always hit &amp;lt;kbd&amp;gt;F5&amp;lt;/kbd&amp;gt; again to restart debugging.&lt;br /&gt;
&lt;br /&gt;
== Deploying the Resource ==&lt;br /&gt;
Now that you have learn how to build and debug your script, later when your resource is ready, you may want to compile it with the Release task to deploy an optimized binary.&lt;br /&gt;
&lt;br /&gt;
Simply, click on menu &#039;&#039;&#039;Terminal&#039;&#039;&#039;&amp;gt;&#039;&#039;&#039;Run Task...&#039;&#039;&#039; then select &#039;&#039;&#039;release&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can find your &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt; in &amp;lt;code&amp;gt;bin/Release/netcoreapp2.0/&amp;lt;/code&amp;gt; as you may notice it contains cleaner files, since we configured to not copy the &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt; files from runtime folder with the &amp;lt;code&amp;gt;&amp;lt;Private&amp;gt;&amp;lt;/code&amp;gt; option.&lt;br /&gt;
This build will be not debugable as the symbols are already removed and optimized for run time.&lt;br /&gt;
&lt;br /&gt;
Proceed to upload these &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt; file to your server, and be sure to set your &#039;&#039;&#039;meta.xml&#039;&#039;&#039; differently as it will be using the non-debugged version.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;meta&amp;gt;&lt;br /&gt;
    &amp;lt;info name=&amp;quot;My Gamemode&amp;quot; description=&amp;quot;My C# bridge gamemode Resource&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;bin/Release/netcoreapp2.0/mygamemode.dll&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/meta&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You might want to have the &amp;lt;tt&amp;gt;.pdb&amp;lt;/tt&amp;gt; file together with it, it will create useful traceable dump in case your code causes server crash during runtime, even though it is not really possible to debug it.&lt;br /&gt;
&lt;br /&gt;
== Client-side ==&lt;br /&gt;
You can also do similar thing to work with client-side scripts, except you do not deal with launch or task commands. However, please note that in RAGE MP Client-side C-Sharp scripts are NOT compiled nor build into &amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt;. Which means you cannot debug it like in this tutorial.&lt;br /&gt;
&lt;br /&gt;
You can still make the project, reference to &#039;&#039;&#039;rage-sharp.dll&#039;&#039;&#039; in &#039;&#039;&#039;RAGEMP/dotnet/&#039;&#039;&#039; folder to get IntelliSense auto completion benefit in VSCode, similar way we did on Bootstrapper:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;ItemGroup&amp;gt;&lt;br /&gt;
    &amp;lt;Reference Include=&amp;quot;RAGE&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;HintPath&amp;gt;..\..\..\dotnet\rage-sharp.dll&amp;lt;/HintPath&amp;gt; &amp;lt;!-- Or absolute path to your X:/RAGEMP/dotnet/rage-sharp.dll --&amp;gt;&lt;br /&gt;
      &amp;lt;Private&amp;gt;False&amp;lt;/Private&amp;gt;&lt;br /&gt;
    &amp;lt;/Reference&amp;gt;&lt;br /&gt;
  &amp;lt;/ItemGroup&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And you just have to save the &amp;lt;tt&amp;gt;.cs&amp;lt;/tt&amp;gt; file, they will be downloaded to your player&#039;s RAGE-MP client and will be compiled as how you configured it.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&lt;br /&gt;
|+ A brief comparison how C# works in RAGE-MP&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Server-side Bridge (Compiled)&lt;br /&gt;
! Server-side (Raw)&lt;br /&gt;
! Client-side&lt;br /&gt;
|-&lt;br /&gt;
! Output&lt;br /&gt;
| [[wikipedia:Common Intermediate Language|IL]] &amp;quot;binary&amp;quot; (&amp;lt;tt&amp;gt;.dll&amp;lt;/tt&amp;gt;)&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | C-Sharp source code (&amp;lt;tt&amp;gt;.cs&amp;lt;/tt&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
! Dependency&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &amp;lt;tt&amp;gt;Bootstrapper.dll&amp;lt;/tt&amp;gt; runtimes &amp;amp; &amp;lt;tt&amp;gt;bridge.dll&amp;lt;/tt&amp;gt; plugin&lt;br /&gt;
| &amp;lt;tt&amp;gt;rage-sharp.dll&amp;lt;/tt&amp;gt; runtimes&lt;br /&gt;
|-&lt;br /&gt;
! Compile Time&lt;br /&gt;
| By server developer with C# Compiler (in SDK)&lt;br /&gt;
| By &amp;lt;tt&amp;gt;server.exe&amp;lt;/tt&amp;gt;&lt;br /&gt;
| By &amp;lt;tt&amp;gt;ragemp_v.exe&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! .NET Core Version&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | 2.0.3 &amp;lt;sup&amp;gt;1)&amp;lt;/sup&amp;gt;&lt;br /&gt;
| 2.2.0 &amp;lt;sup&amp;gt;2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! Debugging&lt;br /&gt;
| Developer&#039;s debugger tool choice (in SDK)&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | RAGE MP app built in error handling &amp;amp; logging&lt;br /&gt;
|}&lt;br /&gt;
Notes:&lt;br /&gt;
* &amp;lt;sup&amp;gt;1)&amp;lt;/sup&amp;gt; As of 0.3.7 based on &amp;lt;tt&amp;gt;.version&amp;lt;/tt&amp;gt; file found in &#039;&#039;&#039;RAGEMP/server-files/bridge/runtime/&#039;&#039;&#039; folder&lt;br /&gt;
* &amp;lt;sup&amp;gt;2)&amp;lt;/sup&amp;gt; As of 0.3.7 based on &amp;lt;tt&amp;gt;.version&amp;lt;/tt&amp;gt; file found in &#039;&#039;&#039;RAGEMP/dotnet/&#039;&#039;&#039; folder&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Getting Started with Development]]&lt;br /&gt;
* [https://wiki.gtanet.work/index.php?title=Getting_Started_with_Development Getting started with Development on C# Bridge Server]&lt;br /&gt;
* [[Server-side events]] (or in [https://wiki.gtanet.work/index.php?title=Scripting_Events C#] bridge)&lt;br /&gt;
* [[Server-side functions]] (or in [https://wiki.gtanet.work/index.php?title=Server_Scripting_Functions C#] bridge)&lt;br /&gt;
* [[Client-side events]] (or in [[Client-side_CSharp_events|C#]])&lt;br /&gt;
* [[Client-side functions]] (or in [[Client-side_CSharp_functions|C#]])&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Vula</name></author>
	</entry>
</feed>