正在优化生成外的程序集

本文关键字:程序集 优化 | 更新日期: 2023-09-27 18:26:36

我有一个程序集,里面完全装满了在另一个程序集中实现接口的类。例如:

Main Assembly (Reference to both assemblies)
Shared Assembly
-----IModule 
Class Assembly (Reference to shared assembly)
-----unknownType : IModule
-----unknownType2 : IModule

主程序集没有直接引用类程序集中的任何类型。我正在寻找这样的类型:

// Load all referenced assemblies:
Assembly.GetExecutingAssembly().GetReferencedAssemblies()
    .Except(AppDomain.CurrentDomain.GetAssemblies().Select(a => a.GetName()))
    .Distinct()
    .ToList()
    .ForEach(act => Assembly.Load(act));
// Find all instances of IModule in loaded assemblies:
var modules = from asm in AppDomain.CurrentDomain.GetAssemblies()
   from provider in asm.GetTypes()
   where typeof(IModule).IsAssignableFrom(provider)
   ...instantiate type etc...

如果我在类程序集中只引用了一个任意类型,那么它会显示在GetReferencedAssemblys中,被加载并正确返回,但一旦我删除了对该类型的引用,它就不会被传输到生成目录,也不会显示为引用的程序集,从而导致加载失败。

是否有任何方法可以强制VS将此程序集包含在输出目录中?主应用程序不应该知道类程序集中的任何类型。

正在优化生成外的程序集

我想我理解你的问题,但你能澄清你的问题吗?您是否希望将添加为项目引用的程序集与应用程序一起复制到输出文件夹?你是如何添加引用的?是您在文件对话框中浏览到的.dll或.exe,还是从"添加引用"对话框中的列表中选择的COM或GAC程序集?

如果你浏览过它,但它不在GAC目录中,那么这种优化是意料之中的事。在解决方案资源管理器中选择您的引用,并确保属性窗口中的"Copy Local"设置为true。您可能会尝试切换此设置,即使是这样。您的.vsproj文件可能只需要重新生成即可包含引用。

如果您试图从存储在字符串中的文件名或在运行时选择的文件名引用.dll,那么Visual Studio将无法知道您的应用程序正在使用它,但无法将其复制到输出目录中。不过,如果你有.dll.

的路径,那么使用File.Copy应该不会太难