问题标签 [gac-msil]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3691 浏览

.net - 为什么不是 GAC 中的所有程序集都构建为 MSIL?

并非全局程序集缓存 (GAC) 中的所有程序集都构建为 的原因是MSIL什么?我看到了某些程序集使用x86AMD64架构类型,如下例所示,但其他程序集则没有:

C:\Windows\assembly\

在此处输入图像描述

为什么是System.Data为两种不同的处理器架构构建的,而System.Coreis MSIL

C:\Windows\Microsoft.NET\assembly

在此处输入图像描述

在 GAC 的第二个版本中可以看到类似的模式,如上所示。程序集分为不同的架构,但并非所有程序都内置于32/64版本中——有些只是MSIL.

0 投票
1 回答
213 浏览

c# - GAC_MSIL 和外壳扩展

我在尝试开发的同时还为我的 shell 图标覆盖和上下文内容创建了一个 COM .DLL,所以我在工具上进行了一些搜索以实现这一点,然后我找到了 SharpShell,shell 扩展帮助工具。

我一直在使用sharpshell创建一个示例.DLL,一旦生成,我使用他们的“服务器管理器”自动帮助将我的.DLL注册到注册表并且服务器正确加载。

在注册表上,我看到它们已正确注册,但我的 UI 没有任何变化。所以我尝试下载“Shell Ext Viewer - Shexview - 64 位。”打开我的 shell 列表后,我看到我的 Dll 在那里注册,但他们正在读取我在 C:\Windows\Assembly\GAC_MSIL\ 文件夹中的 .DLL 文件. 所以我尝试在我的资源管理器中浏览它们,但我发现我没有 GAC 程序集。

我进一步检查了文章以寻求帮助,我发现它们是 .nEt 扩展,我还检查了我的 .NET,4.0 中的所有 .NET 都已正确安装,但我的程序集中没有 GAC_MSIL。我应该怎么做才能告诉我的 Shell 将我的 dll 文件打开到正确的文件中?Visual Studio有什么方法可以将我的Dll和服务器注册到指定的文件夹,而不是GAC_MSIL文件夹,因为我错过了它?

谢谢你,我非常感谢你的帮助!

0 投票
1 回答
160 浏览

c# - .NET 中枚举类型的内存分配

现在,当我过去经常使用嵌入式系统和严重的内存限制时,我记得我们必须非常注意所使用的类型以及它们的使用方式。现在,Windows 程序员典型的浪费空间只是因为你有几 GB 的内存。在任何情况下,我都不想在没有必要的时候浪费,因为如果每个应用程序(和操作系统)都这样做,那么它就会累积起来,最终你的 PC 会很慢。

话虽如此,我正在考虑 C# 或实际上 .NET 中的枚举类型,因为它与您使用哪种语言无关。例如,如果我这样定义一个枚举类型:

在分配时在物理内存中,它是否会占用与此完全相同的字节数:

对于那些不明白这一点的人,在一些(早期)编译器中,枚举通常作为查找表存储在内存中,因此第二个将占用大约 3000 个插槽。

现在,我倾向于相信在 .NET 中它们不是查找表,并且会占用 3 个整数加上任何其他信息的空间。还是我弄错了?只是好奇,我不想仅仅因为我想偷懒就用零填充内存。

0 投票
0 回答
468 浏览

wcf - “指数数组的边界之外。” - 当调用动态生成的 WCF 函数方法时

我使用 MSIL 发出语句为我的类创建了一个动态函数,并将该类托管为 WCF 服务。

发出的代码:

方法是“int add(int, int)”。这是代理从客户端的外观

客户电话:

但是,当我尝试从客户端调用此函数时,我收到以下异常 - “mscorlib.dll 中发生了类型为 'System.ServiceModel.FaultException`1' 的未处理异常”附加信息:索引超出了数组的范围。

堆栈跟踪 :

任何帮助都深表感谢。谢谢。

0 投票
1 回答
8455 浏览

c# - SAP Crystal Reports v13 运行时未安装在本地计算机上

我在我的 Windows 10 专业版上运行 VS Professional 2015,我需要在我的计算机上安装 Crystal Reports 运行时,以便我可以使用 CrystalDecisions.CrystalReports.Engine 和 CrystalDecisions.Shared 版本 13.0.2000.0 构建项目。

我目前还在我的计算机上安装了 Crystal Reports 2008 版本 12.0.0.683,以在 VS 2015 之外创建报表。

在我们公司的服务器上,有一个 .msi 文件和一个 .exe 文件。像个白痴一样,我在不知道的情况下运行了 .msi 文件:

将“SAP Crystal Reports,Microsoft Visual Studio 开发人员版本”集成到 VS 2010 或 2012(SP 7 或更高版本)或 VS 2013(SP 9 或更高版本)或 VS 2015 RC (SP14) - VS 2015(完全 - SP 15) ,您必须运行安装可执行文件。运行 MSI 不会将 Crystal Reports 完全集成到 VS 中。根据定义,MSI 文件仅用于运行时分发。

因此,在运行 .msi 文件并意识到我的错误后,我从 .msi 文件中运行了“卸载”选项并检查了我的 GAC。CrystalDecisions 已从我的“GAC_32”和“GAC_64”文件夹中卸载。然而,奇怪的是,在我的“GAC_MSIL”文件夹中,它的 CrystalDecisions 版本为 12.0.2000.0。

GAC_MSIL 文件夹 - 但 GAC_32 或 GAC_64 中没有 CrystalDecisions 文件夹

我检查了我的控制面板 -> 程序 -> 程序和功能,我在任何地方都找不到“SAP Crystal Reports runtime engine for .NET Framework(64-bit)”和“SAP Crystal Reports,Microsoft Visual Studio 版本”,所以我想卸载成功。

这次尝试运行 .exe 文件时,我收到一条错误消息,指出由于以下错误而无法运行安装:

SAP Crystal Reports 运行时安装错误窗口

所以我检查了EventViewer -> Windows Logs -> Application,错误日志说安装时出错 1603 和“产品:SAP Crystal Reports,Microsoft Visual Studio 版本——你必须已经有 Visual Studio 2010 或 Visual Studio 2012安装以继续进行此安装。”

我和我的老板谈过,他说他怀疑我需要 VS 2012,在我的电脑上同时安装 VS 2012 和 2015 是没有意义的。不幸的是,我无法像我们的生产服务器那样使用 CrystalDecisions v.13 构建项目,如果我将其发布到生产环境,在我的计算机上使用 CrystalDecisions v.12 构建项目将导致项目失败。

我检查了 StackOverflow 上的其他问题,并看到了一些解决方案:

  1. 安装 VS 2012 - 除非万不得已,否则不可选择;我们只有 VS 2015 - 除非安装 VS 2012 的“社区”版本可以解决问题。
  2. 进行系统还原- 有人建议,因为我运行的是 .msi 文件而不是 .exe,它弄乱了我的程序集,因此在我运行 .msi 文件之前进行系统还原可以修复它并允许我正确安装 CR 运行时, 但是我的老板又说他不会推荐它
  3. 尝试从 SAP 网站运行 CR 运行时设置,使用除 v.13 之外的更新版本,用于我的 x64 位机器,它将与 VS 2015 集成而无需 VS 2012 - 然后当我构建我的项目时,我的 CR 运行时的更新版本将是与生产服务器上的 CR 运行时不同,当我在生产服务器上发布我的项目时会出现冲突。
  4. 更改/删除我的程序集文件,因为运行 .msi 文件搞砸了我的程序集缓存- 真的很危险;我不知道关于汇编文件的第一件事,我可能会弄乱我的电脑。如果 GAC_32 和 GAC_64 文件夹没有“CrystalDecisions”,是否可以从我的“GAC_MSIL”文件夹中手动删除“CrystalDecisions”文件夹?

这些解决方案都不是可取的,所以有没有人有其他我看不到的解决方案?

感谢您的耐心等待。我可以把头撞在桌子上,因为我运行的是 .msi 文件,而不是仔细阅读说明。我觉得自己像个白痴...

0 投票
0 回答
3761 浏览

dll - 正在构建的项目“MSIL”的处理器架构与参考的处理器架构不匹配

我正在使用 eConnect SDK 11.0。我有一个 Windows 服务应用程序,我在其中添加了 GP sdk 的引用。

1) Microsoft.Dynamics.GP.eConnect.dll

2) Microsoft.Dynamics.GP.eConnect.Serialization.dll

当我构建我的项目时,它已成功构建但给了我以下警告

1) 正在构建的项目的处理器架构“MSIL”与参考的处理器架构“Microsoft.Dynamics.GP.eConnect, Version=11.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture= AMD64”、“AMD64”。这种不匹配可能会导致运行时失败。请考虑通过配置管理器更改项目的目标处理器体系结构,以便在项目和参考之间对齐处理器体系结构,或者依赖具有与项目的目标处理器体系结构匹配的处理器体系结构的参考。

2) 正在构建的项目的处理器架构“MSIL”与参考的处理器架构“Microsoft.Dynamics.GP.eConnect.Serialization Version=11.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture =AMD64”,“AMD64”。这种不匹配可能会导致运行时失败。请考虑通过配置管理器更改项目的目标处理器体系结构,以便在项目和参考之间对齐处理器体系结构,或者依赖具有与项目的目标处理器体系结构匹配的处理器体系结构的参考。

知道我能做些什么来解决这个问题吗?我正在尝试在 Release 64 设置中构建我的项目

0 投票
1 回答
797 浏览

c# - C# MSIL 调用方法并传递一个对象[]

我想使用反射发射依赖项将 C# 中的方法转换为 MSIL 代码。

我试图转换的方法是转换方法:

所以基本上创建一个类的实例并使用一个新对象[]调用一个方法函数,该对象将处理所有传递给它的参数。

当我查看 IlSpy 时,我有这个:

并试图制作一个可以代表的函数:

但是有时我不知道自己做错了什么,调试时得到的唯一错误是: System.InvalidProgramException: 'Common Language Runtime detected an invalid program.'

目标只是复制“转换”函数所做的事情,获取所有参数并将其传递给对象 [] 调用参数中包含该对象 [] 的方法并返回其他方法返回的内容。

注意:转换函数并不总是要接收 3 个字符串,也可以是其他对象。

0 投票
1 回答
200 浏览

c# - 实现接口与添加新方法之间有区别吗?

如下代码所示,IFoo在两个不同的程序集中定义了两个接口:

假设程序集 A 和程序集 B 错误地具有相同的签名(程序集弱名称或强名称)。为类生成的 MSILBar是否会根据构建时使用的是程序集 A 还是程序集而有所不同?

换句话说,假设我们在运行时用程序集 A 和 C 构建了一个项目,在运行时用程序集 B 替换 A 是否可以?或者我会得到像“IFoo.DoSomethingElse”这样的异常没有实现,因为在构建过程中DoSomethingElse被认为是一种新方法,而不是在接口中实现现有方法。