<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://opensimulator.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://opensimulator.org/index.php?action=history&amp;feed=atom&amp;title=Developing_OpenSim_Addins%2Fde</id>
		<title>Developing OpenSim Addins/de - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://opensimulator.org/index.php?action=history&amp;feed=atom&amp;title=Developing_OpenSim_Addins%2Fde"/>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=Developing_OpenSim_Addins/de&amp;action=history"/>
		<updated>2026-05-31T08:38:19Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.19.9</generator>

	<entry>
		<id>http://opensimulator.org/index.php?title=Developing_OpenSim_Addins/de&amp;diff=55051&amp;oldid=prev</id>
		<title>Manni: Created page with &quot;{{Quicklinks|Developing_OpenSim_Addins}} = Developing OpenSim Addins = Diese Seite erklärt, wie man OpenSimulator Region Module Addins entwickelt, paketiert und verteilt. Sie...&quot;</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=Developing_OpenSim_Addins/de&amp;diff=55051&amp;oldid=prev"/>
				<updated>2025-12-16T09:18:49Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;{{Quicklinks|Developing_OpenSim_Addins}} = Developing OpenSim Addins = Diese Seite erklärt, wie man OpenSimulator Region Module Addins entwickelt, paketiert und verteilt. Sie...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Quicklinks|Developing_OpenSim_Addins}}&lt;br /&gt;
= Developing OpenSim Addins =&lt;br /&gt;
Diese Seite erklärt, wie man OpenSimulator Region Module Addins entwickelt, paketiert und verteilt. Sie richtet sich an Entwickler, die zusätzliche Funktionalität bereitstellen möchten, die über die Kernverteilung von OpenSim hinausgeht, und die diese in binärer Form an andere weitergeben möchten. Diese Anleitung bezieht sich auf [[New Region Modules|Region Module]], die auf den Simulatoren laufen. Es wird vorausgesetzt, dass Sie bereits mit den Grundlagen der Entwicklung von Region Modulen vertraut sind.&lt;br /&gt;
&lt;br /&gt;
'''Hinweis:''' Diese Dokumentation wurde für OpenSimulator Version 0.9.3.x mit .NET 8.0 Runtime aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nach der Installation von Drittanbieter-Addins suchen, lesen Sie bitte [[Installing 3rd party addins|diese andere Seite]].&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
&lt;br /&gt;
Bevor Sie OpenSim Addins entwickeln, stellen Sie sicher, dass Sie Folgendes haben:&lt;br /&gt;
* .NET 8.0 SDK installiert (https://dotnet.microsoft.com/en-us/download/dotnet/8.0)&lt;br /&gt;
* OpenSimulator 0.9.3.x Quellcode oder Entwicklungsumgebung&lt;br /&gt;
* Grundlegendes Verständnis von C# und OpenSim Region Module Entwicklung&lt;br /&gt;
&lt;br /&gt;
== Das finale Paket ==&lt;br /&gt;
&lt;br /&gt;
OpenSim enthält mehrere eingebaute Addins, die als Beispiele dienen. Zwei gute Referenzen sind:&lt;br /&gt;
* '''OpenSim.Addons.OfflineIM''' - Verarbeitet Offline-Sofortnachrichten&lt;br /&gt;
* '''OpenSim.Addons.Groups''' - Stellt Gruppenfunktionalität bereit&lt;br /&gt;
&lt;br /&gt;
Ein typisches Addin-Paket enthält:&lt;br /&gt;
* Die Region Module DLL&lt;br /&gt;
* Alle externen Abhängigkeiten (zusätzliche DLLs)&lt;br /&gt;
* Konfigurationsdateien (.ini)&lt;br /&gt;
* Zusätzliche Ressourcen (HTML-Dateien, Bilder, etc.)&lt;br /&gt;
&lt;br /&gt;
Dies sind alle Dateien, die OpenSim-Benutzer benötigen, um das Addin in ihren Installationen auszuführen.&lt;br /&gt;
&lt;br /&gt;
== Addin-Direktiven ==&lt;br /&gt;
&lt;br /&gt;
Wie üblich sollte das Region Module mit dem Extension-Attribut als OpenSim Region Module annotiert werden:&lt;br /&gt;
&lt;br /&gt;
     ['''Extension'''(Path = &amp;quot;/OpenSim/RegionModules&amp;quot;, NodeName = &amp;quot;RegionModule&amp;quot;, Id = &amp;quot;IhrModulId&amp;quot;)]&lt;br /&gt;
     public class IhrModul : ISharedRegionModule&lt;br /&gt;
     {&lt;br /&gt;
       ...&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
Für nicht-geteilte Region Module verwenden Sie stattdessen '''INonSharedRegionModule'''.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich sollte das Assembly, das das Region Module enthält, die folgenden Direktiven in Properties/AssemblyInfo.cs enthalten:&lt;br /&gt;
&lt;br /&gt;
 // Diese Zeilen sind für die Addin-Paketierung erforderlich&lt;br /&gt;
 [assembly: '''Addin'''(&amp;quot;IhrAddin.Name&amp;quot;, OpenSim.VersionInfo.VersionNumber + &amp;quot;.1&amp;quot;)]&lt;br /&gt;
 [assembly: '''AddinDependency'''(&amp;quot;OpenSim.Region.Framework&amp;quot;, OpenSim.VersionInfo.VersionNumber)]&lt;br /&gt;
 [assembly: '''AddinDescription'''(&amp;quot;Beschreibung Ihres Addins&amp;quot;)]&lt;br /&gt;
 [assembly: '''AddinAuthor'''(&amp;quot;Ihr Name&amp;quot;)]&lt;br /&gt;
 &lt;br /&gt;
 // Die nächsten Zeilen sind optional - externe Abhängigkeiten einbinden&lt;br /&gt;
 [assembly: '''ImportAddinAssembly'''(&amp;quot;ExterneBibliothek.dll&amp;quot;)]&lt;br /&gt;
 [assembly: '''ImportAddinFile'''(&amp;quot;IhreKonfig.ini&amp;quot;)]&lt;br /&gt;
 [assembly: '''ImportAddinFile'''(&amp;quot;ressource.html&amp;quot;)]&lt;br /&gt;
&lt;br /&gt;
=== Addin-Direktiven verstehen ===&lt;br /&gt;
&lt;br /&gt;
Die erste Direktive [assembly: '''Addin'''(&amp;quot;IhrAddin.Name&amp;quot;, OpenSim.VersionInfo.VersionNumber + &amp;quot;.1&amp;quot;)] legt den öffentlichen Namen Ihres Addins fest: Dies ist, was die Benutzer sehen werden. Achten Sie besonders auf die Versionsnummer. Während Sie jede beliebige Versionsnummer verwenden können, wird dringend empfohlen, die Versionsnummer Ihres Addins mit der OpenSim-Version zu verknüpfen, gegen die Sie Ihren Code kompilieren.&lt;br /&gt;
&lt;br /&gt;
Mit .NET 8.0 ist die Binärkompatibilität weiterhin wichtig, daher sollten Sie Ihre Benutzer darüber informieren, mit welcher OpenSim-Version dieses Addin kompatibel ist. Der direkteste Weg, diese Information weiterzugeben, besteht darin, sie zur Versionsnummer Ihres Addins hinzuzufügen. In diesem Fall verwenden wir die ersten Ziffern, um die OpenSim-Versionsnummer (z.B. 0.9.3.1) anzugeben, und die letzte Ziffer, um die eigene Version dieses Addins anzugeben. Wenn wir dieses Addin zwischen OpenSim-Releases weiterentwickeln würden, würde diese letzte Ziffer auf 2 erhöht, während die ersten Ziffern gleich blieben.&lt;br /&gt;
&lt;br /&gt;
Die zweite Direktive [assembly: '''AddinDependency'''(&amp;quot;OpenSim.Region.Framework&amp;quot;, OpenSim.VersionInfo.VersionNumber)] legt die Abhängigkeit mit der konkreten OpenSim-DLL fest, die dieses Addin erweitert. Alle Region Module Addins erweitern OpenSim.Region.Framework. Auch hier sollte die Versionsnummer die aktuelle OpenSim-Versionsnummer sein, da dies die DLL ist, gegen die Sie Ihren Code kompilieren. Für eine Erklärung, wie die Versionierung funktioniert, siehe [[Installing_3rd_party_addins#Versioning]]&lt;br /&gt;
&lt;br /&gt;
Die dritte und vierte Direktive geben eine Beschreibung und Autorenschaft-Informationen für Ihr Addin.&lt;br /&gt;
&lt;br /&gt;
Die letzten Direktiven (ImportAddinAssembly, ImportAddinFile) binden zusätzliche Dateien in das Paket ein, die notwendig sind, damit die Addins in den Umgebungen Ihrer Benutzer funktionieren. Die Direktive [assembly: '''ImportAddinAssembly'''(&amp;quot;ExterneBibliothek.dll&amp;quot;)] hat zwei Zwecke: (1) sie bindet diese DLL in das Paket ein und (2) sie informiert die Laufzeitumgebung des Benutzers, dass diese DLL ebenfalls geladen werden sollte, wenn unser Addin in den Speicher geladen wird.&lt;br /&gt;
&lt;br /&gt;
== Beispiel: OfflineIM Addon ==&lt;br /&gt;
&lt;br /&gt;
Das OfflineIM-Addon, das mit OpenSim ausgeliefert wird, demonstriert Best Practices:&lt;br /&gt;
&lt;br /&gt;
'''Modul-Deklaration:'''&lt;br /&gt;
 [Extension(Path = &amp;quot;/OpenSim/RegionModules&amp;quot;, NodeName = &amp;quot;RegionModule&amp;quot;, Id = &amp;quot;OfflineIMConnectorModule&amp;quot;)]&lt;br /&gt;
 public class OfflineIMRegionModule : ISharedRegionModule, IOfflineIMService&lt;br /&gt;
 {&lt;br /&gt;
     public void Initialise(IConfigSource config)&lt;br /&gt;
     {&lt;br /&gt;
         IConfig cnf = config.Configs[&amp;quot;Messaging&amp;quot;];&lt;br /&gt;
         if (cnf == null)&lt;br /&gt;
             return;&lt;br /&gt;
         if (cnf != null &amp;amp;&amp;amp; cnf.GetString(&amp;quot;OfflineMessageModule&amp;quot;, string.Empty) != Name)&lt;br /&gt;
             return;&lt;br /&gt;
         &lt;br /&gt;
         m_Enabled = true;&lt;br /&gt;
         // ... Initialisierungscode&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     public void AddRegion(Scene scene)&lt;br /&gt;
     {&lt;br /&gt;
         if (!m_Enabled)&lt;br /&gt;
             return;&lt;br /&gt;
         &lt;br /&gt;
         scene.RegisterModuleInterface&amp;lt;IOfflineIMService&amp;gt;(this);&lt;br /&gt;
         // ... Region-Setup&lt;br /&gt;
     }&lt;br /&gt;
     // ... andere Interface-Methoden&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
'''AssemblyInfo.cs:'''&lt;br /&gt;
 [assembly: Addin(&amp;quot;OpenSim.OfflineIM&amp;quot;, OpenSim.VersionInfo.VersionNumber)]&lt;br /&gt;
 [assembly: AddinDependency(&amp;quot;OpenSim.Region.Framework&amp;quot;, OpenSim.VersionInfo.VersionNumber)]&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Ein sehr wichtiger Teil des Prozesses hat mit der Konfiguration Ihres Addins zu tun. Anstatt Benutzer zu zwingen, ihre OpenSim.ini-Dateien manuell zu bearbeiten und den zu Ihrem Addin gehörenden Konfigurationsabschnitt hinzuzufügen, empfehlen wir die Verwendung modularer Konfigurationen. In modularen Konfigurationen sind Ihre Komponenten dafür verantwortlich, ihre eigenen Konfigurationsdateien zu lesen.&lt;br /&gt;
&lt;br /&gt;
Hier ist das empfohlene Muster zum Laden der Konfiguration:&lt;br /&gt;
&lt;br /&gt;
        public void Initialise(IConfigSource config)&lt;br /&gt;
        {&lt;br /&gt;
            // Wir laden die Konfigurationsdatei nur, wenn die Hauptkonfiguration noch nichts über dieses Modul weiß&lt;br /&gt;
            IConfig cnf = config.Configs[&amp;quot;IhrModulName&amp;quot;];&lt;br /&gt;
            if (cnf == null)&lt;br /&gt;
            {&lt;br /&gt;
                LoadConfiguration(config);&lt;br /&gt;
                cnf = config.Configs[&amp;quot;IhrModulName&amp;quot;];&lt;br /&gt;
                if (cnf == null)&lt;br /&gt;
                {&lt;br /&gt;
                    m_log.WarnFormat(&amp;quot;[IHR MODUL]: Konfigurationsabschnitt nicht gefunden. Kann nicht fortfahren.&amp;quot;);&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            // Konfigurationswerte lesen&lt;br /&gt;
            m_Enabled = cnf.GetBoolean(&amp;quot;Enabled&amp;quot;, false);&lt;br /&gt;
            // ... weitere Konfiguration&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
LoadConfiguration sollte wie folgt deklariert werden:&lt;br /&gt;
&lt;br /&gt;
        private void LoadConfiguration(IConfigSource config)&lt;br /&gt;
        {&lt;br /&gt;
            string configPath = string.Empty;&lt;br /&gt;
            bool created;&lt;br /&gt;
            if (!Util.MergeConfigurationFile(config, &amp;quot;IhrModul.ini&amp;quot;, &lt;br /&gt;
                Path.Combine(AssemblyDirectory, &amp;quot;IhrModul.ini&amp;quot;), &lt;br /&gt;
                out configPath, out created))&lt;br /&gt;
            {&lt;br /&gt;
                m_log.WarnFormat(&amp;quot;[IHR MODUL]: Konfigurationsdatei nicht zusammengeführt&amp;quot;);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if (created)&lt;br /&gt;
            {&lt;br /&gt;
                m_log.ErrorFormat(&amp;quot;[IHR MODUL]: BITTE BEARBEITEN SIE {0} VOR DEM AUSFÜHREN DIESES ADDINS&amp;quot;, configPath);&lt;br /&gt;
                throw new Exception(&amp;quot;Addin muss vor dem Ausführen konfiguriert werden&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        private static string AssemblyDirectory&lt;br /&gt;
        {&lt;br /&gt;
            get&lt;br /&gt;
            {&lt;br /&gt;
                string location = Assembly.GetExecutingAssembly().Location;&lt;br /&gt;
                return Path.GetDirectoryName(location);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
Diese Methode verwendet '''OpenSim.Framework.Util.MergeConfigurationFile''', die die ConfigDirectory-Variable aus der OpenSim-Konfiguration liest und prüft, ob die Konfigurationsdatei dieses Moduls bereits vorhanden ist. Wenn ja, wird sie einfach mit den OpenSim-Konfigurationen zusammengeführt. Wenn nicht, kopiert sie die Konfigurationsdatei, die sie im Paket mitgebracht hat, in das ConfigDirectory und warnt den Operator, dass er sie nach seinen Bedürfnissen bearbeiten sollte.&lt;br /&gt;
&lt;br /&gt;
== Projektstruktur ==&lt;br /&gt;
&lt;br /&gt;
OpenSim 0.9.3.x verwendet entweder traditionelle prebuild.xml oder moderne .NET SDK-Style .csproj-Dateien.&lt;br /&gt;
&lt;br /&gt;
=== Verwendung von Prebuild (Traditionell) ===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie prebuild.xml verwenden, stellen Sie sicher, dass alle notwendigen Dateien in das Ausgabeverzeichnis kopiert werden:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;Project name=&amp;quot;OpenSim.Addon.IhrModul&amp;quot; path=&amp;quot;addon-modules/IhrModul&amp;quot; type=&amp;quot;Library&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Configuration name=&amp;quot;Debug&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Options&amp;gt;&lt;br /&gt;
        &amp;lt;OutputPath&amp;gt;../../bin/&amp;lt;/OutputPath&amp;gt;&lt;br /&gt;
        &amp;lt;AllowUnsafe&amp;gt;true&amp;lt;/AllowUnsafe&amp;gt;&lt;br /&gt;
      &amp;lt;/Options&amp;gt;&lt;br /&gt;
    &amp;lt;/Configuration&amp;gt;&lt;br /&gt;
    &amp;lt;Configuration name=&amp;quot;Release&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Options&amp;gt;&lt;br /&gt;
        &amp;lt;OutputPath&amp;gt;../../bin/&amp;lt;/OutputPath&amp;gt;&lt;br /&gt;
        &amp;lt;AllowUnsafe&amp;gt;true&amp;lt;/AllowUnsafe&amp;gt;&lt;br /&gt;
      &amp;lt;/Options&amp;gt;&lt;br /&gt;
    &amp;lt;/Configuration&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;ReferencePath&amp;gt;../../bin/&amp;lt;/ReferencePath&amp;gt;&lt;br /&gt;
    &amp;lt;Reference name=&amp;quot;Nini&amp;quot; path=&amp;quot;../../bin/&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;Reference name=&amp;quot;log4net&amp;quot; path=&amp;quot;../../bin/&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;Reference name=&amp;quot;Mono.Addins&amp;quot; path=&amp;quot;../../bin/&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Weitere OpenSim-Referenzen hinzufügen --&amp;gt;&lt;br /&gt;
    &amp;lt;Reference name=&amp;quot;OpenSim.Region.Framework&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;Reference name=&amp;quot;OpenSim.Framework&amp;quot;/&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;Files&amp;gt;&lt;br /&gt;
      &amp;lt;Match pattern=&amp;quot;*.cs&amp;quot; recurse=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;Exclude name=&amp;quot;obj&amp;quot; pattern=&amp;quot;obj&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;Exclude name=&amp;quot;Tests&amp;quot; pattern=&amp;quot;Tests&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/Match&amp;gt;&lt;br /&gt;
      &amp;lt;Match pattern=&amp;quot;*.ini&amp;quot; buildAction=&amp;quot;Copy&amp;quot; destination=&amp;quot;../../bin/&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;Match pattern=&amp;quot;*.html&amp;quot; buildAction=&amp;quot;Copy&amp;quot; destination=&amp;quot;../../bin/&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Files&amp;gt;&lt;br /&gt;
  &amp;lt;/Project&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Erstellen/Ändern von prebuild.xml ausführen:&lt;br /&gt;
  $ runprebuild.bat       (Windows)&lt;br /&gt;
  $ ./runprebuild.sh      (Linux/Mac)&lt;br /&gt;
&lt;br /&gt;
=== Verwendung von .NET SDK-Style Projekten (Modern) ===&lt;br /&gt;
&lt;br /&gt;
Moderne .NET 8.0-Projekte können SDK-Style .csproj-Dateien direkt verwenden:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;Project Sdk=&amp;quot;Microsoft.NET.Sdk&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;PropertyGroup&amp;gt;&lt;br /&gt;
      &amp;lt;TargetFramework&amp;gt;net8.0&amp;lt;/TargetFramework&amp;gt;&lt;br /&gt;
      &amp;lt;OutputPath&amp;gt;../../bin/&amp;lt;/OutputPath&amp;gt;&lt;br /&gt;
      &amp;lt;GenerateAssemblyInfo&amp;gt;false&amp;lt;/GenerateAssemblyInfo&amp;gt;&lt;br /&gt;
      &amp;lt;AllowUnsafeBlocks&amp;gt;true&amp;lt;/AllowUnsafeBlocks&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;Mono.Addins&amp;quot; HintPath=&amp;quot;../../bin/Mono.Addins.dll&amp;quot; Private=&amp;quot;False&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;ProjectReference Include=&amp;quot;../../OpenSim/Region/Framework/OpenSim.Region.Framework.csproj&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;ProjectReference Include=&amp;quot;../../OpenSim/Framework/OpenSim.Framework.csproj&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/ItemGroup&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;ItemGroup&amp;gt;&lt;br /&gt;
      &amp;lt;None Update=&amp;quot;*.ini&amp;quot; CopyToOutputDirectory=&amp;quot;PreserveNewest&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/ItemGroup&amp;gt;&lt;br /&gt;
  &amp;lt;/Project&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ihr Addon bauen ==&lt;br /&gt;
&lt;br /&gt;
=== Mit Prebuild ===&lt;br /&gt;
  1. Führen Sie Prebuild aus, um Projektdateien zu generieren&lt;br /&gt;
  2. Bauen Sie mit dotnet oder Visual Studio:&lt;br /&gt;
     $ dotnet build IhrAddon.csproj -c Release&lt;br /&gt;
&lt;br /&gt;
=== Mit direkter .csproj ===&lt;br /&gt;
  $ dotnet build IhrAddon.csproj -c Release&lt;br /&gt;
&lt;br /&gt;
Alle Ausgabedateien sollten im bin/-Verzeichnis neben anderen OpenSim-Assemblies landen.&lt;br /&gt;
&lt;br /&gt;
== Das Addin paketieren ==&lt;br /&gt;
&lt;br /&gt;
Um die Dateien für die Verteilung zu paketieren, verwenden Sie das '''mautil''' Kommandozeilen-Tool, das im OpenSim bin-Verzeichnis enthalten ist.&lt;br /&gt;
&lt;br /&gt;
  $ /pfad/zu/mautil.exe pack bin/IhrAddon.dll&lt;br /&gt;
&lt;br /&gt;
Dies erstellt eine Datei namens '''IhrAddon_0.9.3.1.1.mpack''' (Version kann variieren). Dies ist das Addin-Paket, das an den Standorten der Benutzer verteilt und installiert wird.&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass .mpack-Dateien komprimierte (zip) Archive sind. Sie können sie öffnen und ihren Inhalt mit Tools zur Inspektion von Zip-Dateien überprüfen.&lt;br /&gt;
&lt;br /&gt;
=== mautil-Befehle ===&lt;br /&gt;
&lt;br /&gt;
Das mautil-Tool (Mono.Addins Manager) unterstützt mehrere Befehle:&lt;br /&gt;
&lt;br /&gt;
* '''pack''' - Erstellt ein .mpack-Paket aus einer DLL&lt;br /&gt;
* '''rep-build''' - Baut ein Addin-Repository&lt;br /&gt;
* '''install''' - Installiert ein Addin aus einem Repository&lt;br /&gt;
* '''uninstall''' - Deinstalliert ein Addin&lt;br /&gt;
* '''list''' - Listet installierte Addins auf&lt;br /&gt;
&lt;br /&gt;
Für weitere Informationen:&lt;br /&gt;
  $ /pfad/zu/mautil.exe --help&lt;br /&gt;
&lt;br /&gt;
== Ihre Addins verteilen ==&lt;br /&gt;
&lt;br /&gt;
Um Ihre Addins anderen zur Verfügung zu stellen, müssen Sie Ihr eigenes Addin-Repository erstellen und es auf einem Webserver hosten.&lt;br /&gt;
&lt;br /&gt;
Um das Repository zu erstellen, erstellen Sie irgendwo einen Ordner und platzieren Sie alle Ihre Addin-Pakete (.mpack) darin. Dann:&lt;br /&gt;
&lt;br /&gt;
  $ /pfad/zu/mautil.exe rep-build /pfad/zu/repo/ordner&lt;br /&gt;
&lt;br /&gt;
Dies erstellt zusätzliche Indexdateien (main.mrep, root.mrep) mit den richtigen Einträgen. Alles, was Sie als Nächstes tun müssen, ist den gesamten Inhalt dieses Ordners auf einen Webserver hochzuladen.&lt;br /&gt;
&lt;br /&gt;
Schließlich müssen Sie Ihre Benutzer über die URL Ihres Repositorys informieren, damit sie es zu ihren Registern hinzufügen und Addins aus Ihrem Repository installieren können. Sie können Ihr Repo [[List of 3rd Party Addin Repositories|hier]] hinzufügen.&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
&lt;br /&gt;
* '''Versionskompatibilität:''' Kompilieren Sie immer gegen die spezifische OpenSim-Version, die Ihr Addon anvisiert&lt;br /&gt;
* '''Konfiguration:''' Verwenden Sie modulare Konfigurationsdateien, anstatt manuelle OpenSim.ini-Bearbeitungen zu erfordern&lt;br /&gt;
* '''Abhängigkeiten:''' Dokumentieren Sie alle externen Abhängigkeiten klar&lt;br /&gt;
* '''Testen:''' Testen Sie Ihr Addon sowohl mit Standalone- als auch mit Grid-Konfigurationen&lt;br /&gt;
* '''Dokumentation:''' Stellen Sie klare Installations- und Konfigurationsanweisungen bereit&lt;br /&gt;
* '''Protokollierung:''' Verwenden Sie geeignete Log-Level (Debug, Info, Warn, Error)&lt;br /&gt;
* '''.NET 8.0:''' Stellen Sie Kompatibilität mit .NET 8.0 Runtime sicher&lt;br /&gt;
* '''Fehlerbehandlung:''' Implementieren Sie ordnungsgemäße Fehlerbehandlung und geben Sie aussagekräftige Fehlermeldungen&lt;br /&gt;
&lt;br /&gt;
== Fehlerbehebung ==&lt;br /&gt;
&lt;br /&gt;
=== Häufige Probleme ===&lt;br /&gt;
&lt;br /&gt;
* '''Assembly nicht gefunden:''' Stellen Sie sicher, dass alle referenzierten Assemblies im bin-Verzeichnis sind&lt;br /&gt;
* '''Versions-Missmatch:''' Überprüfen Sie, dass OpenSim.VersionInfo.VersionNumber mit Ihrer OpenSim-Installation übereinstimmt&lt;br /&gt;
* '''Modul lädt nicht:''' Prüfen Sie, dass das Extension-Attribut korrekt ist und das Modul das richtige Interface implementiert&lt;br /&gt;
* '''Konfiguration nicht gefunden:''' Überprüfen Sie, dass die .ini-Datei ins bin-Verzeichnis kopiert wurde und MergeConfigurationFile aufgerufen wird&lt;br /&gt;
* '''.NET Runtime-Probleme:''' Stellen Sie sicher, dass .NET 8.0 Runtime installiert ist&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[New Region Modules]] - Dokumentation zur Region Module Entwicklung&lt;br /&gt;
* [[Installing 3rd party addins]] - Anleitung für Benutzer zur Installation von Addins&lt;br /&gt;
* [[List of 3rd Party Addin Repositories]] - Community-Addon-Repositories&lt;br /&gt;
&lt;br /&gt;
== Externe Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/opensim/opensim OpenSimulator GitHub Repository]&lt;br /&gt;
* [https://dotnet.microsoft.com/en-us/download/dotnet/8.0 .NET 8.0 Download]&lt;br /&gt;
* [http://opensimulator.org/ OpenSimulator Webseite]&lt;/div&gt;</summary>
		<author><name>Manni</name></author>	</entry>

	</feed>