- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在按照 2006 年 Microsoft .Net 类(class)工作簿中的说明进行其中一项练习。 (具体来说,这门类(class)是 MS2349B,我正在做模块 4 练习 2。)。这些练习似乎是为 Vista 之前的日子而构建的,那时每个人都始终拥有完全的管理员权限。 (我使用的是 .net 4.0。)
此练习涉及构建强名称程序集,将其安装在 GAC 中,针对强名称程序集构建本地可执行文件,验证可执行文件是否运行。
按照教程,我使用 #if
block 对程序集进行签名:
#if STRONG
[assembly: System.Reflection.AssemblyVersion("2.0.0.0")]
[assembly: System.Reflection.AssemblyKeyFile("OrgVerKey.snk")]
#endif
我以本地用户身份构建我的可执行文件:
C:\path\to\lab>csc /define:STRONG /target:library
/out:AReverser_v2.0.0.0\AReverser.dll AReverser_v2.0.0.0\AReverser.cs
C:\path\to\lab>csc /reference:MyStringer\Stringer.dll
/reference:AReverser_v2.0.0.0\AReverser.dll Client.cs
我通过以管理员身份运行的 visual studio 命令提示符将它安装到 GAC 中:
C:\path\to\lab>gacutil /i AReverser_v2.0.0.0\AReverser.dll
当我在管理员提示符下运行我的 exe 时,我得到了我期望的输出——应用程序运行良好并且似乎从 gac 正确加载了 dll。当我在非管理员命令提示符下运行时,出现以下错误
Unhandled Exception: System.IO.FileLoadException: Could not load file or assembl
y 'AReverser, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b5fcbdcff229fabb'
or one of its dependencies. The located assembly's manifest definition does not
match the assembly reference. (Exception from HRESULT: 0x80131040)
at MainApp.Main()
令我感到奇怪的是 publicKeyToken 与 GAC 中的不同:
AReverser, Version=2.0.0.0, Culture=neutral, PublicKeyToken=f0548c0027634b66
但是,如果我从 GAC 卸载 AReverser 并尝试以管理员提示运行我的 exe,我会收到以下错误,表明它正在寻找预期的公钥 token f0548c0027634b66:
C:\path\to\lab>gacutil /u "AReverser,Version=2.0.0.0,Culture=neutral,
PublicKeyToken=f0548c0027634b66"
Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.
Assembly: AReverser, Version=2.0.0.0, Culture=neutral, PublicKeyToken=f0548c0027
634b66
Uninstalled: AReverser, Version=2.0.0.0, Culture=neutral, PublicKeyToken=f0548c0
027634b66
Number of assemblies uninstalled = 1
Number of failures = 0
C:\path\to\lab>Client.exe
Unhandled Exception: System.IO.FileLoadException: Could not load file or assembl
y 'AReverser, Version=2.0.0.0, Culture=neutral, PublicKeyToken=f0548c0027634b66'
or one of its dependencies. The located assembly's manifest definition does not
match the assembly reference. (Exception from HRESULT: 0x80131040)
at MainApp.Main()
在 Admin 下注意,它实际上正在搜索正确的 publicKeyToken。
什么给了?为什么搜索的 publickKeyTokens 会有所不同?我可能做错了什么?
编辑
我们被告知要使用的应用程序配置可能是罪魁祸首,我想知道您是否必须是管理员才能应用其中的一些设置。摆脱它似乎会导致以管理员身份运行失败(尽管在这种情况下 publicKeyToken 被列为 NULL)。这是我的应用配置
<configuration>
<runtime>
<assemblyBinding
xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="MyStringer"/>
<publisherPolicy apply="no"/>
<dependentAssembly>
<assemblyIdentity name="AReverser"
publicKeyToken="f0548c0027634b66"
culture=""/>
<publisherPolicy apply="no"/>
<bindingRedirect oldVersion="2.0.0.0"
newVersion="2.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
最佳答案
在您的磁盘中搜索 AReverser.dll。您可能在某处隐藏了一些额外的副本。 VS 可以制作已编译 dll 的卷影副本。
如果这不能帮助激活融合日志记录(使用 fuslogvw.exe 或假脱机融合日志到磁盘),然后查看从中加载有问题的 dll 的日志。IMO 是加载了错误的 dll。
关于c# - 在探测程序集时,为什么搜索的 publicKeyToken 在以管理员身份运行与以普通用户运行时不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7617450/
每个签名的 .NET 都有一个公钥 token (8 个字节)和一个公钥(128 个字节)。 两者有什么区别,为什么我们需要两个公共(public)“ key ”? 最佳答案 公钥 token 只是
如何从 snk 文件中获取 PublicKeyToken?使用命令行工具。我想过使用sn.exe,但是,找不到合适的参数。 最佳答案 如果您想使用 sn.exe工具: sn -p yourkey.sn
如果我从我的项目 C# 文件夹中打开 Resources.resx,我会看到类似这样的内容: ..\Resources\picture.png;System.Drawing.Bitmap,
Could not load file or assembly 'NCrawler.GeckoProcessor, Version=3.0.0.0, Culture=neutral, PublicKe
我需要在我的 web.config 文件中重新创建一个如下所示的提供程序: 但是,我收到一个运行时错误,提示无法加载此程序集,我认为这是因为我的 PublicKey
我在一个遗留项目上工作,必须支持同一个 dll 的 8 个不同版本。我可以访问库源代码,因此我可以自己构建这些 dll。 dll 是强签名的,每个都有自己的版本号 3.6.0.0、3.7.0.1 等。
我在编译托管 DLL 项目时遇到问题。该解决方案由两个项目组成,第一个是用 C# 编写的 .NET DLL,另一个是直接引用 C# 项目的托管 C++ DLL。 这两个项目/DLL 都使用磁盘上的 s
我正在使用以下代码: AppDomain.CurrentDomain.AssemblyLoad += (sender, args) => { var token = args.LoadedAs
我正在尝试使用这篇博文中的建议获取针对 Asp.Net Identity 的瑞典语本地化错误消息:How to localize ASP.NET Identity UserName and Passw
我的 app.config 中有以下内容。 ... Fusion 日志记录告诉我它没有在 bin2 中查
希望我什至能正确地问我的问题。我在尝试序列化特定对象时遇到以下异常(我熟悉使用标准 [Serializable] 属性) A first chance exception of type 'Syste
我正在按照 2006 年 Microsoft .Net 类(class)工作簿中的说明进行其中一项练习。 (具体来说,这门类(class)是 MS2349B,我正在做模块 4 练习 2。)。这些练习似
{"Could not load file or assembly 'AssemblyName, PublicKeyToken=null' or one of its dependencies. Th
我们有一个 asp.net 4.0 项目,它使用几个依赖于 log4net 版本 1.2.10.0 的框架。今天我尝试包含一个依赖于 log4net 版本 1.2.11.0 的新框架,从那时起我就陷入
我正在使用 PRISM 和我在 CodePlex 中找到的新控件:WPF 属性网格 http://wpg.codeplex.com/ 当我测试 DEMO 时,一切进展顺利。 我还没有开始使用 PRIS
我向我的应用程序添加了一条 UPDATE 语句,该语句运行良好。它正确更新数据库,除了四个错误消息之外,我没有看到任何问题。这是什么意思? Error 1 Type Microsoft.Dat
是否可以从 GAC 中卸载所有具有特定 PublicKeyToken 的程序集? 我接受命令行(gacutil.exe 等)或通过 C# 的解决方案。 编辑: 仅供引用,我可以通过 Windows 资
我必须在我的项目中使用一些引用程序集 XXXXX 的 dll 文件。我现在在我的项目中有这个程序集的更新版本,但是当我运行我的项目时我得到错误:Could not load file or assem
使用来自 Docusign、Twilio 和 Auth0 的 API。所有 3 个都将 RestSharp.dll 作为依赖项。 如果我使用 Docusign 包中包含的 RestSharp.dll,
我有一个在开发环境中引用此程序集的应用程序: name="Microsoft.Data.SqlXml" culture="neutral" publicKeyToken="89845dcd8080cc
我是一名优秀的程序员,十分优秀!