На основании этого вопроса Как получить пространство имен сборки? :
Я могу получить пространство имен из сборки с помощью Assembly.GetTypes()
, но как я могу предоставить этот полученный файл пространства имен шириной, например using Namespace
, в первых строках файла C # при загрузке с помощью «Добавить ссылку» в настройках проекта?
Что с другими файлами C #? Как я могу предоставить им это загруженное пространство имен?
Мой подход:
// using NameSpaceFromLib; ??? how to do this with Assembly.LoadFrom
namespace Test
{
public class ClassA : DisposableObject
{
static ClassA()
{
AppDomain currentDomain = AppDomain.CurrentDomain;
// switch between 32 and 64 bit version
currentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomainAssemblyResolve);
}
private const string LibraryName = "LibToLoad";
private static Assembly CurrentDomainAssemblyResolve(object sender, ResolveEventArgs args)
{
if (args.Name.StartsWith(LibraryName, StringComparison.InvariantCultureIgnoreCase))
{
return LoadBitDepthDependentAssembly(LibraryName + ".dll");
}
return null;
}
private static Assembly LoadBitDepthDependentAssembly(string assemblyname)
{
var currentDirectory = Environment.CurrentDirectory;
try
{
var platformDirectory = Environment.Is64BitProcess ? "x64" : "x86";
var newPath = Helper.GetApplicationPath(platformDirectory);
Environment.CurrentDirectory = newPath;
var p = Path.Combine(newPath, assemblyname);
var assembly = Assembly.LoadFrom(p);
return assembly;
}
finally
{
Environment.CurrentDirectory = currentDirectory;
}
}
}
}
Спасибо!
PS: Мне нужно это различать во время выполнения, если x86 или x64 вариант C ++ / CLI dll для загрузки