Tag: 程序集

C# – 引用动态生成的程序集中的类型

我试图弄清楚当你动态生成程序集时是否可能引用先前动态生成的程序集中的类型。 例如: using System; using System.CodeDom.Compiler; using System.Reflection; using Microsoft.CSharp; CodeDomProvider provider = new CSharpCodeProvider(); CompilerParameters parameters = new CompilerParameters(); parameters.GenerateInMemory = true; CompilerResults results = provider.CompileAssemblyFromSource(parameters, @” namespace Dynamic { public class A { } } “); Assembly assem = results.CompiledAssembly; CodeDomProvider provider2 = new CSharpCodeProvider(); CompilerParameters parameters2 = new CompilerParameters(); parameters2.ReferencedAssemblies.Add(assem.FullName); parameters2.GenerateInMemory = […]

如何在AssemblyResolve事件之前在运行时加载程序集?

实际上我试图在我的解决方案中实现某种“静态链接”程序集。 所以我尝试了以下内容: 使用CopyLocal = false添加对程序集的引用 使用“添加为链接”将.dll文件本身添加到我的解决方案中 使用“添加资源”将“.dll”文件本身添加到我的资源中 – “添加现有文件” 将我的程序集中的某些类型添加到Form1中作为private MyObject temp = new MyObject(); 执行这些步骤后,我按预期获得了FileNotFoundException。 因此,让我们尝试使用此快速入侵在AssemblyResolveEvent中加载程序集 AppDomain.CurrentDomain.AssemblyResolve += (sender, e) => { Assembly MyAssembly = AppDomain.CurrentDomain.Load(Properties.Resources.ExternalAssembly); return MyAssembly; }; 这样可行! 我可以从AssemblyResolveEvent中的资源文件加载我的程序集。 但是这个事件只会发生,如果它无法在其他任何地方找到我的组件。 但是我怎么能在 .Net尝试搜索不同的地方之前加载我的程序集? 由于检查先前引用的程序集的事实,我认为可以预先将程序集加载到域中,这将被采用。 我在program.cs中使用以下Main()方法尝试了这个 static void Main() { LoadMyAssemblies(); AppDomain.CurrentDomain.AssemblyResolve += (sender, e) => LoadMyAssemblies(); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } private static […]

使用Reflection(DotNET)查找程序集中的所有命名空间

我有一个程序集(作为ReflectionOnly加载),我想找到这个程序集中的所有命名空间,所以我可以将它们转换为自动生成的源代码文件模板的“using”(VB中的“Imports”)语句。 理想情况下,我只想将自己限制在顶级命名空间,而不是: using System; using System.Collections; using System.Collections.Generic; 你只会得到: using System; 我注意到System.Type类上有一个Namespace属性,但有没有更好的方法来收集程序集内的命名空间,而不涉及迭代所有类型并剔除重复的命名空间字符串? 大卫,很有责任

在assembly负载上初始化库

我有一个.net库DLL,就像一个函数库。 有许多静态类型和静态方法。 我需要运行一些初始化代码来设置库以供使用。 当程序集加载时,是否有办法确保运行特定方法? 像AppDomain.AssemblyLoad之类的东西,但是从程序集本身自动调用。 我在想,也许有类似AssemblyAttribute可以使用的东西? 目前我在静态构造函数中有这个初始化代码,但由于这是一个包含许多入口点的库,因此无法保证将使用此特定类型。 谢谢!

如何在运行时加载程序集并创建类实例?

我有一个集会。 在这个程序集中,我有一个类和接口。 我需要在运行时加载这个程序集,并希望创建该类的对象,并且还想使用该接口。 Assembly MyDALL = Assembly.Load(“DALL”); // DALL is name of my dll Type MyLoadClass = MyDALL.GetType(“DALL.LoadClass”); // LoadClass is my class object obj = Activator.CreateInstance(MyLoadClass); 这是我的代码。 怎么可以改进?