Registrierte COM-DLL nur unter 2013R2 verwendbar?

30. November 2018 12:35

Hallo miteinander.

Ich habe mich mal daran gemacht NAV um einen eigenen Typen zu erweitern. Das Kompilieren des C#-Codes (Klassenbibliothek), das Registrieren mittels regasm und auch das Installieren des Assembly in den globalen Assembly Cache mit gacutil funktioniert einwandfrei. Auf der NAV-Seite kann ich diesen neuen Typen dann auch in jeder Installation sehen, im Code verwenden und fehlerfrei kompilieren. Die Ausführung klappt aber fehlerfrei nur unter einer NAV 2013 R2-Installation.

Der C#-Code:
(AssemblyInfo.cs)
Code:
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// Allgemeine Informationen über eine Assembly werden über die folgenden
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
// die mit einer Assembly verknüpft sind.
[assembly: AssemblyTitle("TestControl")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("TestControl")]
[assembly: AssemblyCopyright("Copyright ©  2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest.
[assembly: ComVisible(true)]

// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
[assembly: Guid("e6460053-525f-4298-9f93-b5a33cd184a5")]

// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
//
//      Hauptversion
//      Nebenversion
//      Buildnummer
//      Revision
//
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
// übernehmen, indem Sie "*" eingeben:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]


die eigentliche Klasse
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using System.Runtime.InteropServices;

namespace TestControl
{
    [ComVisible(true)]
    public interface TestControllAddIn
    {
        string ValueMessage();
    }

    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    public class NavisionConnection : TestControllAddIn
    {
        public String ValueMessage()
        {
            return ("Hi Navision");
        }

        public int Sum(int i, int j)
        {
            return (i + j);
        }
    }
}


Die Aufrufe, nachdem die DLL ins AddIn-Verzeichnis kopiert wurde:
Code:
regasm /tlb:TestControl.tlb TestControl.dll
gacutil /i TestControl.dll


Kann mir jemand sagen, was ich da verkehrt mache?

Viele Grüße
Kai