Задача возникает потому, что наша организация работает Как по старым, так и в более новых проектах, требуя поддержки нескольких версий Tekla Structures. Моя цель состоит в том, чтобы создать приложение, которое может динамически работать со всеми версиями структур Tekla без перекомпиляции для каждой версии. Например, DLLS из Tekla Structures 2023 будет работать только со структурами Tekla 2023, а не с более ранними версиями. Заводящая версия Tekla Structures. Однако, поскольку я ссылался на DLL непосредственно в своем проекте, Visual Studio автоматически извлекает недостающие DLL из глобального кэша сборки (GAC). < /P>
Код: Выделить всё
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;
}
}
}
Код: Выделить всё
< /p>
Подробнее здесь: https://stackoverflow.com/questions/793 ... on-version
Мобильная версия