标签: assemblies

列出所有可用的.NET程序集

列出所有可用的.NET 2.0程序集的最佳方法是什么?

所需列表的一个示例是当您在.NET选项卡中执行"添加引用..."时,MS Visual Studio会显示一个.

我读过Visual Studio使用自己的目录配置和GAC另一个和.NET安装另一个.有关如何以计算机可移植方式知道此目录的位置的任何想法(例如,另一台计算机可能在D:驱动器中安装了Windows)?

从列出的信息来看,它必须是Assembly.Loadxxxx()它.

注意:它应该以编程方式完成,而不是使用gacutil(例如,除非它提供了C#API).所有这一切的目的是创建一个自定义动态脚本编辑器,以便您了解获取此信息的必要性.

.net legacy assemblies

11
推荐指数
1
解决办法
5682
查看次数

如何卸载Win32程序集并清理WinSxS?

经过大量的试验和错误(主要是由于缺少文档和示例),我设法创建了MSI安装程序,将自定义DLL作为并行程序集安装到WinSxS.只有一个问题:卸载会将所有文件(DLL,清单和目录)保留在WinSxS目录中.怎么能或者我应该最好地清理它?我确信没有别的东西可以引用它.

我已经读过某个地方,WinSxS有一个自我清理过程,随着时间的推移清理,但我无法找到更多相关信息.你可以手动调用它来清理东西吗?

我看到的唯一另一种方法是手动删除这些位.首先,您必须将所有文件(程序集,目录,清单及其各自的目录)的所有者从SYSTEM更改为管理员帐户,调整权限并将其删除.注册表中还有一些部分(我认为HKLM\COMPONENTS\DerivedData\Components可能是一个地方),但由于WinSxS应该被视为不透明,因此很难找到任何信息.

windows-installer winsxs assemblies wix uninstall

11
推荐指数
2
解决办法
2万
查看次数

如何在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;
    };
Run Code Online (Sandbox Code Playgroud)

这样可行!我可以从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 Assembly LoadMyAssemblies()
{
    Assembly result = AppDomain.CurrentDomain.Load(Properties.Resources.MyStaticAssembly);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

但它仍会运行到ResolveEventHandler中.更好的是,如果我再次加载程序集并查看AppDomain.CurrentDomain.GetAssemblies()我可以看到我的程序集加载了两次!!

所以任何想法为什么加载程序集在AssemblyResolve事件之前加载时不会被考虑在内?在调试器的帮助下,当调用来自AssemblyResolve时,我也返回了null,但是在这种情况下,我在开头时得到了一个FileNotFoundException.

c# assemblies .net-3.5

11
推荐指数
1
解决办法
1万
查看次数

ILMerge和本地化资源程序集

我们有一个应用程序,其编译时的结构如下所示:

    • NB-NO
      • Text.resources.dll
    • SV-SE
      • Text.resources.dll
    • Bar.dll
    • foo.exe的
    • Text.dll

是否可以在此使用ILMerge?你会怎么做?

resources ilmerge assemblies localization satellite-assembly

11
推荐指数
2
解决办法
3309
查看次数

如何获取基类的所有继承类?

    class Foo { }

    class Foo1 : Foo { }

    class Foo2 : Foo { }
Run Code Online (Sandbox Code Playgroud)

我怎样才能将所有使用Foo的类作为基类?在同一程序集中不需要继承的类.

c# reflection inheritance assemblies

11
推荐指数
1
解决办法
6400
查看次数

如何确定.NET程序集是否包含非托管代码?

包含托管代码和非托管代码混合的.NET程序集不能与其他程序集进行ILMerged.

如何验证给定的.NET程序集是包含纯托管代码,还是托管代码和非托管代码的混合?

.net assemblies native unmanaged

11
推荐指数
2
解决办法
4762
查看次数

解决装配,模糊的方式

这是设置:

纯粹的DotNET类库由非托管桌面应用程序加载.类库充当插件.这个插件加载了自己的小插件(所有DotNET类库),它通过将dll作为字节流读入内存来实现,然后

Assembly asm = Assembly.Load(COFF_Image);
Run Code Online (Sandbox Code Playgroud)

当那些小宝贝插件引用其他dll时会出现问题.由于它们是通过内存而不是直接从磁盘加载的,因此框架通常无法找到这些引用的程序集,因此无法加载它们.

我可以在我的项目中添加一个AssemblyResolver处理程序,我可以看到这些引用的程序集已经过去了.我对在磁盘上找到这些引用程序集的位置有一个相当好的想法,但是如何确保Assmebly I load是正确的?

简而言之,我如何可靠地从System.ResolveEventArgs.Name字段转到dll文件路径,假设我有一个这个dll可能隐藏的所有文件夹的列表?

c# assemblies resolveassemblyreference

11
推荐指数
1
解决办法
1998
查看次数

修改C#编译的exe中的Emdeded String

我有一个问题,我需要能够有一个编译的exe(.net 3.5 c#),我将复制分发,例如在发送exe之前需要更改密钥.

每次需要新的exe时我都无法编译.这是一个瘦客户端,将用作注册过程的一部分.

是否可以向具有空值的资源文件添加条目,然后当请求进入时,另一个应用程序获取空白的默认瘦客户端,复制它,用所需数据填充空白值.

如果有,怎么样?如果没有,你有什么想法吗?我现在已经摸不着头几天了,这个限制是由于我需要工作的边界.

我的另一个想法是将值注入一个方法,我不知道我怎么会尝试这个.

谢谢.

c# executable assemblies code-injection disassembly

11
推荐指数
2
解决办法
8344
查看次数

整个程序集的静态构造函数

我的程序集中有很多入口点,我希望在运行此程序集中的任何其他代码之前,每个AppDomain执行一次初始化代码.最好的方法是什么?

我看到的一个解决方案是拥有一个带有静态构造函数的类,并继承我拥有的每个入口点.像这样的东西:

public class Initializer
{
    static Initializer()
    {
        EnsureInitialized();  // Calls initialization code once and only once
    }
}

public class EntryPointOne : Initializer, IEntryPoint
{
    // Some code here
}

public class EntryPointTwo : Initializer, IEntryPoint
{
    // Some code here
}

// etc.
Run Code Online (Sandbox Code Playgroud)

这让我可以避免在每个入口点编写样板静态构造函数,但是没有多继承,这并不总是可行的.你能想到其他更好的选择吗?

c# static assemblies initialization

11
推荐指数
1
解决办法
3234
查看次数

如何查找包含与模式匹配的类型/成员的所有程序集?

我有一个包含数千个文件的文件夹(可能带有嵌套的子文件夹),其中一些是DLL,其中一些是.NET程序集.我需要找到包含与特定模式匹配的类型/成员的所有程序集(例如"*Collection",或"Create*").最好(最快)的方法是什么?

建议开源库是可以的,只要它们的使用不需要打开我的源代码.

.net c# reflection clr assemblies

11
推荐指数
1
解决办法
329
查看次数