Laden Sie DLLs in vb.net basierend auf der AnwendungsversionC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Laden Sie DLLs in vb.net basierend auf der Anwendungsversion

Post by Anonymous »

Ich entwickle derzeit eine .NET -Anwendung für Tekla Structures (CAD -Software). Tekla Structures veröffentlicht jährlich eine neue Version (z. B. 2020, 2021, 2022, 2023 usw.), und jede Version verfügt über eine Reihe spezifischer DLL -Dateien wie tekla.structures.dll und tekla.structures.model.dll, zusammen mit ihren Abhängigkeiten. Während diese DLLs die gleichen Namen haben und zum größten Teil die gleichen Klassen und Methoden (ca. 99% Kompatibilität) sind, sind sie versionsspezifisch. Sowohl bei älteren als auch bei neueren Projekten, die Unterstützung für mehrere TEKLA Structures -Versionen erfordern. Mein Ziel ist es, eine Anwendung zu erstellen, die dynamisch mit allen Versionen von Tekla -Strukturen arbeiten kann, ohne für jede Version neu zu kompilieren. Zum Beispiel funktionieren die DLLs von Tekla Structures 2023 nur mit Tekla -Strukturen 2023, nicht mit früheren Versionen. Die ausführliche Version von Tekla Structures. Da ich jedoch die DLLs direkt in meinem Projekt verwiesen habe, ruft Visual Studio die fehlenden DLLs automatisch vom globalen Assembly -Cache (GAC) ab. < /P>

Code: Select all

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Dummy;

namespace TestDummyDLL
{
public partial class Form1 : Form
{
public Form1()
{

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(ResolveMissingDll);
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
var dummy = new Dummy.Dummy();
dummy.Print();
}

private static Assembly ResolveMissingDll(object sender, ResolveEventArgs args)
{
string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;

string TeklaVersion = "2023"; // Tekla version will be retrieved by looking up running process.
string dllsFolder = Path.Combine(baseDirectory, TeklaVersion);

string assemblyName = new AssemblyName(args.Name).Name + ".dll";
string assemblyPath = Path.Combine(dllsFolder, assemblyName);

if (File.Exists(assemblyPath))
{
return Assembly.LoadFrom(assemblyPath);
}

return null;
}

}
}
app.config Inhalt:
Ich habe BindingRectirects in der App.config -Datei für jede TEKLA -Strukturenversion hinzugefügt , aber leider wird es nicht gelöst, da die Referenz, die ich hinzugefügt habe (um die Methoden zu verwenden) als primär angesehen wird und stattdessen verwendet wird. < /p>

Code: Select all



















Lokale Kopie auf False:
< /p>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post