gpt4 book ai didi

.net - 附加到 .NET 程序集的 Windows EXE 应用程序 list 是否应具有正确的应用程序名称和版本集?

转载 作者:行者123 更新时间:2023-12-02 07:35:45 24 4
gpt4 key购买 nike

在应用程序的 Visual Studio 项目属性中,有一个选项“创建没有 list 的应用程序”。通过 ClickOnce 部署应用程序时需要此选项, 但我不明白这个选项做了什么,到目前为止我的研究如下......

在禁用该选项并重新编译时,我注意到列出程序集内容的 .NET 程序集 list 仍然完好无损且没有更改。在比较二进制文件时(在 Beyond Compare 中使用十六进制比较模式),我注意到这个 block 已从 EXE 镜像的末尾删除:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

我相信这是一个 Windows 可执行应用程序 list ,如 MSDN ( Application Manifests ) 中所述:

An application manifest is an XML file that describes and identifies the shared and private side-by-side assemblies that an application should bind to at run time.

奇怪的是,上述 XML 中的应用程序名称和版本似乎具有默认值(MyApp,版本 1.0.0.0),而构建此二进制文件的 Visual Studio 项目定义了正确的名称和版本号,所以在我看来,似乎所有 .NET 二进制文件(或无论如何都是 EXE 文件)都嵌入了相同的默认 WindowsEXE list 。是这样吗?我应该在某处设置这些名称和版本值吗?

最佳答案

list 中出现的名称是一个逻辑名称。它不需要实际匹配 EXE 名称。 Windows 仅在您找到的描述中提到的一种情况下使用过它,即“私有(private)并行程序集”情况。

并行程序集在使用 DLL 的非托管应用程序中很重要。它解决了 DLL hell 问题,此类应用不仅通过名称还通过版本检索 DLL。您会在计算机上的 c:\windows\winsxs 中找到这些“程序集”的存储位置。很少有商业程序实际使用此功能,利用起来相当令人头疼,而且文档也很差,您几乎只能在该目录中找到 Microsoft DLL。自 Vista 以来,它变得相当庞大,操作系统 DLL 也存储在那里。

这对您来说可能听起来很熟悉,.NET 也有这样一个并排目录。没有存储在同一个地方,也没有使用相同的名称。我们称之为 GAC,即全局程序集缓存。底层管道在其他方面是相同的,但更容易利用,因为对 Fusion api 的支持是直接在 CLR 中构建的。并且不需要 list hoopla,.NET 程序集在其程序集元数据中已经具有必要的属性。然而,对于 list 所做的其他事情,.NET 可执行文件中仍然需要 list 。您发布的那个很重要,它告诉 Windows 您的程序是 UAC 感知的,并且在执行诸如在 HKLM 中写入注册表项或将文件复制到 c:\windows 之类的操作时不必被欺骗。应用程序名称和版本在那里,因为它不是可选的。

长话短说,对于 .NET 程序而言, list 中的名称和版本实际上都不重要。

关于.net - 附加到 .NET 程序集的 Windows EXE 应用程序 list 是否应具有正确的应用程序名称和版本集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16834271/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com