Tag: gac

查询x64-GAC

使用以下代码,我正在查询GAC以查看是否安装了某个程序集。 代码本身工作正常,但我只得到x86 GAC的结果。 该程序集安装在GAC GAC_64和GAC_32中。 我需要做什么才能使’QueryAssemblyInfo’检查x64 GAC? public bool IsInGac(string assemblyName) { ASSEMBLY_INFO assembyInfo = new ASSEMBLY_INFO(); assembyInfo.cchBuf = 512; assembyInfo.currentAssemblyPath = new string(‘\0’, assembyInfo.cchBuf); IAssemblyCache assemblyCache = null; IntPtr hr = NativeMethods.CreateAssemblyCache(out assemblyCache, 0); if (hr == IntPtr.Zero) { hr = assemblyCache.QueryAssemblyInfo(1, assemblyName, ref assembyInfo); if (hr != IntPtr.Zero) { return false; } return […]

如何解决我的项目DLL和GAC中的DLL之间的歧义?

我目前正在研究ASP.NET MVC项目中的另一个问题 。 为了更好地理解代码库中发生的事情,我决定在我自己的项目中引用ASP.NET MVC源代码项目,方法是将解决方案文件添加到我的引用中。 当我这样做时,我开始收到HTTP 404错误。 我恰好在HandleErrorAttribute的OnException()方法上设置了断点,否则可能需要很长时间才能找到实际问题。 当我将鼠标hover在OnException方法调用中的filterContext参数上时,我得到此Exception描述: 类型’System.Web.Mvc.ViewMasterPage’是不明确的: 它可能来自assembly[GAC中的assembly路径] 或从assembly[我的项目中的assembly路径] GAC中的程序集就在那里,因为我安装了ASP.NET MVC 2.0 RC2版本 。 我如何才能最好地解决这种歧义?

枚举所有已安装的程序集版本(在GAC中)

是否可以使用C#枚举GAC中所有已安装的程序集版本? 例如,我有一个名为“My.Assembly”的程序集。 程序集可能有各种版本(“1.0.0.0”,“2.3.4.5”,“0.1.2.4”,…),可以针对各种平台(x86,x64,任何CPU)进行编译。 现在我需要一种方法来确定安装了哪个版本/平台。 我知道我可以枚举GAC中的目录,但这似乎是错误的。 应该有更好的方法来做到这一点。 背景我有一个启动器应用程序,用户在其中选择一个DLL。 启动程序从DLL中检索一些信息(不加载它),然后必须启动正确的托管C#应用程序来处理DLL。 DLL可以针对Win32或x64编译,暴露始终是相同的(平台无关的)接口。 我使用LoadLibrary函数在C#应用程序中加载DLL。 唯一的问题是该过程必须是匹配格式(x86或x64)。 可以而且应该为x86,x64和任何CPU编译C#应用程序。

将程序集版本重定向到不同的CLR / GAC

我有一个关于2个CLR版本的问题,即.NET框架的版本2和版本4,它们使用不同的GAC位置。 我有一个客户端应用程序,它引用了v2 GAC(C:\ Windows \ Assembly)中的程序集“X”。 我现在正在更新程序集“X”以在.NET框架的v4(C:\ Windows \ Microsoft.NET \ assembly)上运行,但是,我不想重新编译客户端应用程序。 注意,在安装到v4 GAC之前,会从v2 GAC中删除程序集“X”。 是否可以创建一个发布者策略文件,该文件将以前驻留在CLR版本2中的程序集重定向到CLR的版本4? 如果是这样,这是如何实现的? 我搜索了MSDN,并了解assemblyBinding元素上有一个applyTo字段,您可以在其中指定.NET框架的版本,但这似乎包含整个绑定。 我想要的是: 我在这里阅读http://msdn.microsoft.com/en-us/magazine/dd727509.aspx,CLR v2.0应用程序现在无法在GAC中看到CLR v4.0程序集。 但是,您可以强制应用程序使用更新的CLR: 那么这个加上出版商政策的混合物是否足够,还是有另一种方式?

Web服务无法在GAC中使用类型创建类型错误

遇到一个不寻常的问题,似乎我喜欢做一些不常见的事情。 我有一个复合控件,它检查我的应用程序的根目录中是否存在给定的Web服务文件,如果不存在,它会在标记中创建带有必要指令的文件以进行滚动,例如: 反过来,它被保存到输出。 完成此步骤后,将启动应用程序池上的回收以在IIS中呈现新页面。 该指令指向的程序集是GAC部署的,但是当ASMX通过IIS提供服务时,由于某些原因被忽略。 如果我将程序集复制到BIN目录中,应用程序工作正常,但是,我想将此解决方案部署为我的SharePoint场中的Web部件更新,并且在我的应用程序中启用了完全信任不是我想要的路径走。 我假设ASMX文件或从GAC部署的程序集中的类inheritance的任何文件被忽略是正确的吗? 我不明白为什么会这样,据我所知,IIS会在BIN中尝试映射程序集,如果找不到,它会去询问GAC是否可以找到它在那里,对吗?

GAC在mvc站点之间共享代码的替代方案

目前,我们在gac中注册了c#对象,我们用它来输出html / string作为我们Web应用程序的通用菜单。 gac注册对象的好处是我们可以更新gac对象,并且引用它的所有应用程序都可以非常有效地获得更新。 html菜单引用了公共位置的一些js和css资源。 c#对象确实根据服务器/环境等执行某些逻辑。 是否有除GAC对象之外的其他选择来执行类似的function。 我曾考虑从另一个项目/控制器引用一个mvc视图,但是存在延迟问题(即菜单是在页面的其余部分之后呈现的)。 我觉得它作为页面的一部分呈现时效果最好。 其他想法/想法/选项?

无法将程序集安装到缓存中?

我试图在Visual Studio 2010命令提示符上向缓存添加程序集。 我收到此错误“将程序集添加到缓存失败:尝试安装没有强名称的程序集”。 我从名为ListTasks2的WCF服务应用程序添加ListTasks2.dll程序集。 我从来没有遇到类似名称的项目,所以为什么现在提出一个问题呢? 注意:我尝试在Visual Studio中签名它仍然无法正常工作。 我想知道这可能是一个许可问题。 我使用了不同的用户凭据,并且能够添加程序集。 问题是我加载了VS解决方案,该项目签署了程序集。 我应该创建一个密钥对吗?

从Path加载程序集

我需要从某个位置而不是从GAC加载程序集。 我无法从GAC中删除程序集,因为我的程序必须在不同的计算机上运行,​​我无法控制程序集是否在GAC中。 我在我的项目中添加了对DLL-File的引用。 不幸的是,汇编是从GAC加载的。 我在Startup -Event中的App.xaml.cs中尝试了以下代码 var directory = Thread.GetDomain().BaseDirectory; var dllPath = Path.Combine(directory, “MyAssembly.dll”); var assembly = Assembly.LoadFrom(dllPath); 不幸的是,程序集仍然是从GAC加载的。 即使程序集在GAC中,我还能从指定位置加载它?

2.0版的System.Management.Automation?

是否有2.0(或更高版本)的System.Management.Automation程序集? 我在看C#中的PowerShell类,它说这个类是在PowerShell 2.0中引入的。 当我在Visual Studio中添加对程序集的引用时,该版本号是否与我看到的版本号相对应? 这是我的另一个问题的另一个问题 ,即在解决该PowerShell集内的PowerShell类时遇到问题。 我在GAC中尝试过System.Management.Automation程序集: C:\Windows\assembly\GAC_MSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e35 和Reference Assemblies : C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0 两个包含文件夹的版本仅为1.0 我安装了PowerShell 2.0。

关于log4net 1.2.11的另一个问题是冲突

我花了最后2个小时在SO上查看这些问题,似乎没有任何工作。 我有一个使用log4net 1.2.11,通过NuGet的解决方案。 它在我运行Windows 7的32位开发工作站上运行良好。它不能在我的64位Windows 2008 R2测试系统上运行。 我得到的错误是: 未处理的exception:System.IO.FileLoadException:无法加载文件或程序集’log4net,Version = 1.2.11.0,Culture = neutral,PublicKeyToken = 669e0ddf0bb1aa2a’或其依赖项之一。 定位的程序集的清单定义与程序集引用不匹配。 我正在查看我的测试系统上的应用程序目录。 log4net.dll文件有1.2.11版。 GAC中的版本是1.2.10版。 我删除了它。 我的开发服务器上有一个版本,还有其他东西; 我也删除了它。 我重建了; 我已经重新部署了。 我已经添加了 到我的配置文件。 似乎没有什么区别。 我的部署项目显示正在部署的log4net程序集的正确版本和签名。 我不知道我还能做些什么,但是我很沮丧,因为日志库阻止了我的应用程序运行。 我错过了什么?