-
dzmitry[li] (25.02.10 15:47) [0]Проблема: необходимо в dll (которая находится в другой папке относительно exe) достать/обработать ресурсы (на самом деле требуется в dll отобразить локализованую форму). Но ресурсы для dll упрямо беруться из папки в которой расположен exe-файл.
dll подгружаются динамически
исходник вида:
Bug.cs (вызываемый exe-файл, ./Bug.exe)
using System;
using System.Globalization;
using System.Threading;
using System.IO;
using System.Reflection;
namespace Bug
{
class Program
{
public static void Main(string[] args)
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("ru");
var MyClass1 = Find();
if (MyClass1 != null)
MyClass1.Run();
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
private static IMyClass Find()
{
var FileInfo1 = new FileInfo(@"folder\Test.dll");
Assembly Assembly1 = Assembly.LoadFile(FileInfo1.FullName);
foreach (Type Type1 in Assembly1.GetTypes())
{
Type IFace = Type1.GetInterface("Bug.IMyClass");
if (IFace != null)
{
IMyClass Result = (IMyClass)Activator.CreateInstance(Type1);
return Result;
}
}
return null;
}
}
}
IMyClass.cs (dll-интерфейс, ./IMyClass.dll)
using System;
namespace Bug
{
public interface IMyClass
{
void Run();
}
}
Test.cs (dll-плагин, ./folder/Test.dll + ./folder/ru/Test.resources.dll)
using System;
using System.Resources;
using System.Reflection;
using Bug;
namespace Test
{
public class MyClass : IMyClass
{
public MyClass()
{
}
public void Run()
{
var Assembly1 = Assembly.GetExecutingAssembly();
var ResourceManager1 = new ResourceManager("Test.Resources.Resource1", Assembly1);
string s = ResourceManager1.GetString("string");
Console.WriteLine(s);
}
}
}
Когда все файлы организовать в одном корне папки - локализованую строчку вижу,
В чём мой затык? -
dzmitry[li] (03.03.10 13:59) [1]проблему решил (другим методом)
подсказка: AddPrivateBinPath