Tag: gac

使用全局程序集缓存(GAC) – 以其设计的方式

以下解决方案是否是在代码中使用GAC库的唯一可能性? Assembly lib = Assembly.Load(“MyLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31f5625abd53197f”); Console.WriteLine(lib.GetType(“MyClass”).GetMethod(“Start”).Invoke(obj, null)); 我有点困惑 – 我已经阅读了很多关于GAC的内容,我知道如何在GAC中签署程序集,安装和卸载程序集,但不知道如何使用它,以及它如何帮助程序员(除了它安全地存储相同库的不同版本)。 我希望我能正常创建类,而不是被迫调用上面提到的方法。 我不想要任何解决方法,例如:“更改Windows注册表”,因为我不认为GAC是为这种操作而设计的。 我想要一个简单的答案:GAC的用途是什么,运行时环境是否以某种方式使用它? 当代码变得非常丑陋且难以管理时,使用GAC的重点是什么? 或许我错过了什么? 也许我应该手动将程序集复制到我的本地文件夹中? 但我听说这也很难。

我可以通过gacutil安装,但不能卸载相同的DLL

我已经使用gacutil安装了一个DLL。 gacutil.exe /i SI.ArchiveService.CommonLogic.Exceptions.dll 使用gacutil / l表明它确实已安装。 SI.ArchiveService.CommonLogic.Exceptions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=925c8734ae397609, processorArchitecture=MSIL 然后我想卸载它。 gacutil.exe /u SI.ArchiveService.CommonLogic.Exceptions.dll Microsoft (R) .NET Global Assembly Cache Utility. Version 3.5.30729.1 Copyright (c) Microsoft Corporation. All rights reserved. No assemblies found matching: SI.ArchiveService.CommonLogic.Exceptions.dll Number of assemblies uninstalled = 0 Number of failures = 0 为什么这不起作用? 我该如何卸载它?

从GAC中卸载C#代码

如何从C#应用程序中卸载GAC。 我无法从GAC卸载特定的exe和DLL。 这是在C#中卸载GAC的正确方法吗? public void RemoveAssembly(string ShortAssemblyName, string PublicToken) { AssemblyCacheEnum AssembCache = new AssemblyCacheEnum(null); string FullAssembName = null; for (; ; ) { string AssembNameLoc = AssembCache.GetNextAssembly(); if (AssembNameLoc == null) break; string Pt; string ShortName = GetAssemblyShortName(AssembNameLoc, out Pt); if (ShortAssemblyName == ShortName) { if (PublicToken != null) { PublicToken = PublicToken.Trim().ToLower(); if […]

行号不正确的exception错误消息

当在Asp.Net网页中抛出exception时,会显示一条错误消息,其中包含完整的堆栈跟踪。 示例如下: 堆栈跟踪: IndexOutOfRangeException:索引超出了数组的范围。 MyNameSpace.SPAPP.ViewDetailsCodeBehind.LoadView()+5112 MyNameSpace.SPAPP.ViewDetailsCodeBehind.Page_Load(Object sender,EventArgs e)+67 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp,Object o,Object t,EventArgs e)+13 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender,EventArgs e)+43 System.Web.UI.Control.OnLoad(EventArgs e)+98 …… 问题是显示的行号与我的代码中引发exception的行不对应。 在上面的例子中,堆栈显示行号5111,但我的.cs文件后面的代码只有250行! aspx页面存储在SharePoint站点中,带有代码的程序集已部署到GAC。 另外,我已经在Debug模式下编译了。 鉴于上面的设置,我如何找出代码中的哪一行导致exception? strelokstrelok指出的澄清: 在发布模式下,exception前面的数字不是代码行。 相反,它是本机编译代码的偏移量,对人类没有任何意义。 更多相关信息: http : //odetocode.com/Blogs/scott/archive/2005/01/24/963.aspx 在调试模式下 ,PDB文件将自动将本机代码偏移量映射到代码中的.cs行,显示的数字将是代码中的相应行。

FxCop和GAC疯狂

当我尝试分析依赖于模式和实践的项目时,使用FxCop,企业库数据(以及其他)2.0.0.0 – FxCop抱怨它不能:“找到程序集参考” – 即使正在分析的应用程序dll已被遵守此版本及其在GAC中的版本。 如果我浏览到GAC尝试选择相同的程序集(我已经检查了版本和公钥令牌),FxCop将不允许我“打开”它。 应用程序成功运行并且肯定会使用问题dll。 操作系统:同时适用于Vista和Windows XP。 版本:Visual Studio 2005和2008. FxCop 1.36应用程序符合VS2005 for .NET 2.0。 如果我尝试使用Reflector浏览应用程序DLL,我会遇到同样的问题。 很明显,它并不认为这与它编译的程序集的版本相同。 有谁知道为什么? 对解决方案的任何建议? 我错过了什么?

以编程方式将程序集安装到GAC中

我需要使用c#在GAC中安装程序集。 以下是我的代码: new System.EnterpriseServices.Internal.Publish().GacInstall(“MyAssembly.dll”); 上面的代码给出了错误: 需要绝对路径 但我需要这个运行而不使用静态文件路径(绝对路径)。 谁能告诉我它是否可能? 我在项目引用中添加了对程序集的引用。 我需要在GAC中安装此程序集。

使共享库可用于多个应用程序的最佳方法是什么?

像大多数商店一样,我们有一群人在开展各种项目,他们都需要访问与我们业务相关的相同核心信息和function,通常是在C#中。 我们目前只是将普通类从一个项目复制到另一个项目,但每个人都开始有自己的风格,我们想要巩固。 我们使用Tortoise SVN并决定维护一个单独的项目来包含我们的公共类,但不确定将这个公共代码部署到我们的各种应用程序的最佳方法。 我们为一家内部IT商店工作,该商店可以决定用户访问应用程序的方式,我们不必担心将产品发布到现实世界中。 我们的一些想法是: 将类编译为单个DLL并将其加载到全局程序集缓存(GAC)中 将类编译为单个DLL并将其保存到位于中央的共享驱动器,以供所有其他项目引用 将类编译为单个DLL并将其包含在每个项目中 只需在启动项目时获取最新的类,但没有中央共享库(我们对此的解释: http : //www.yosefk.com/blog/redundancy-vs-dependencies-which-is-worse。 HTML ) SVN Externals http://svnbook.red-bean.com/en/1.0/ch07s03.html 我知道这是一个常见问题,如果你花时间研究这些或其他选项,你总会找人解释每种方法的缺陷(版本控制,回归测试,“DLL地狱”,“GAC糟透了”等) 。 我几乎找不到任何人谈论什么工作和原因。 有首选方法吗?

如何从GAC加载特定版本的程序集

出于测试目的,我喜欢从GAC加载特定版本的DLL程序集。 但是,我的程序总是加载最新版本 – 我认为由策略程序集驱动。 var dll = Assembly.Load(“Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342”); Console.WriteLine(dll.ToString()); 输出: Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342 即使我以强名称指定版本“4.121.1.0”,它也会加载版本“4.122.1.0”。 有没有办法强制使用特定版本? 来自fuslogvw.exe中请求的fuslogvw.exe结果: *** Assembly Binder Log Entry (29.06.2017 @ 11:24:15) *** The operation was successful. Bind result: hr = 0x0. The operation completed successfully. Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll Running under executable C:\Programs\Tools\ConnectionTester_x64.exe — A detailed error […]

列出从GAC实现特定接口的所有DLL

阿罗哈 给定一个插件架构(C#/ .NET 3.5),插件存储在GAC中,如何列出/加载包含实现我特定接口的类型的所有dll? 换句话说,我想通过查看GAC来调查我的应用程序的哪些插件安装在计算机上。 -Edoode

如何从GAC加载最新版本的DLL

我编写了一个批处理执行框架,在其中我希望(在某些情况下)从GAC加载程序集,其中可能有多个版本,但我只想加载最新版本 。 这有可能吗? TIA