问题标签 [fusion]

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 投票
2 回答
3753 浏览

.net - machine.config 中忽略了 .NET 程序集绑定配置

我有一种情况,我需要能够根据它们的部分名称在 GAC 中加载程序集。为此,我在 app.config 文件中添加了以下内容:

这正是我想要的方式。但是,如果我在 machine.config 文件中放置相同的元素,它似乎会被忽略,并且在尝试加载 MyAssembly 时会出现 FileNotFoundExceptions。

以下是元素在我的app.config中时的程序集绑定日志,并且绑定成功:

将其与我的配置在 machine.config 中时的日志进行对比,并且绑定失败:

问题似乎是第四行,“Policy not being applied to reference at this time”。但是,关于此消息的含义或如何解决它,我几乎找不到文档。

如何让框架识别我的 <runtime> 元素?

提前致谢!

0 投票
5 回答
6183 浏览

.net - 从 .Net 托管代码加载 32 位或 64 位 DLL

我有一个非托管 DLL(Scintilla 代码编辑器的 scilexer.dll,由CodePlex的 Scintilla.Net 使用),它是通过 Scintilla.Net 组件从托管应用程序加载的。Windows 管理的应用程序在 32 位和 64 位环境下都可以正常运行,但我需要创建使用 64 位或 32 位 scilexer.dll 的不同安装。

有没有办法以 32 位和 64 位格式分发 DLL,以便 .Net 框架的 DLL 加载器根据某些 .config 选项或某些“路径名魔术”的东西以 32 位或 64 位格式加载非托管 DLL?

0 投票
4 回答
3986 浏览

msbuild - 如何解决:自定义 MSBuild 任务需要在 AppBase 之外进行组装

我有一个自定义任务,我想在构建我的 C# 项目时执行。此任务位于 MyTask.dll 中,它引用另一个程序集 MyCommon.DLL。

问题是 MyCommon.dll 相对于 MyTask.dll 位于“..\Common\MyCommon.dll”,这将其置于 MSBuild 进程的 AppBase 目录之外。通过分析 MSBuild 的日志并查看 Fusion 关于绑定失败的报告,我已经确认这确实是问题所在。

如何让 Fusion 在构建过程中找到 MyCommon.dll?请注意,移动程序集会破坏我的应用程序,这也取决于它。

更新:好吧,看来我还是会使用副本。其他解决方案都需要在系统范围内进行修改,这在这里并不真正保证。

0 投票
3 回答
5971 浏览

.net - WCF 在创建 ServiceHost 时为“System.ServiceModel”抛出 FileNotFound 异常

我遇到了 WCF 的一个非常奇怪的问题。我在一个解决方案中有 2 个项目,每个项目都启动了一些自托管的 WCF 服务。

项目一:

运行良好。但是,当我尝试运行我的第二个项目时,其中包含:

我得到了例外:

融合日志:

真正奇怪的是,在调试器中,当我得到这个异常时,我可以进入 Visual Studio 中的“QuickWatch”并输入:

我尝试在调试时运行 SysInternals File System Watcher,但除了 devenv.exe 试图跟踪 .pdb 文件以生成堆栈跟踪之外,它没有显示任何“FileNotFound”错误。

有人对看什么有其他想法吗?


更新#1

我查看了该过程的融合日志,似乎发生了一些奇怪的事情。System.ServiceModel 有 2 个日志条目,背靠背:

然后是第二个条目:

所以它似乎尝试加载 System.ServiceModel 两次,一次从本地应用程序目录而不是 GAC?我很困惑...

0 投票
41 回答
120023 浏览

c# - TypeLoadException 说'没有实现',但它已实现

我在我们的测试机器上有一个非常奇怪的错误。错误是:

System.TypeLoadException: Method 'SetShort' in type 'DummyItem' from assembly 'ActiveViewers (...)' does not have an implementation.

我只是不明白为什么。SetShortDummyItem课堂上,我什至重新编译了一个写入事件日志的版本,以确保它不是部署/版本控制问题。奇怪的是调用代码甚至没有调用SetShort方法。

0 投票
3 回答
1936 浏览

dll - 如何发送 gdiplus.dll 但不让 Windows 使用它?

我有一个依赖于 gdiplus 的应用程序。我需要该应用程序也可以在 Windows 2000 上运行。

我想将 GDIPlus 包含在应用程序目录中,以便 Windows 2000 计算机能够运行,但如果机器是 Windows XP、Windows Vista、Windows 7 等,我希望它使用随附并更新的 GDIPlus 版本,与 Windows。

不可能?

0 投票
2 回答
240 浏览

windows - 指示Window的fusion loader先使用系统dll?

我需要在应用程序目录中为 Windows 2000 上的用户部署一个带有 DLL的应用程序。该 dll 是后来作为系统 dll 随 Windows XP 一起提供的。

Windows XP 也是在 Microsoft 引入 Fusion 加载程序时,用于解决程序集依赖性。

是否可以指示不使用我文件夹中的 dll 版本,而是始终使用系统提供的该 dll的最新版本?而且Windows 2000 没有Fusion 加载程序,也没有dll,所以它只会使用我文件夹中的版本吗?

0 投票
1 回答
2419 浏览

.net - C# 类的构造函数顺序:参数化、默认和静态?

假设我有一个具有 3 个构造函数、一个默认(无参数)构造函数、一个参数化构造函数和一个静态构造函数的类。像这样:

假设我调用参数化构造函数,这些构造函数以什么顺序执行?

我认为它是静态的,然后是参数化的,然后是默认的。但是……我的经验并不同意这一点。


背景:我有一个将引用的 DLL 作为资源嵌入的应用程序。在运行时,应用程序通过以下方式注册一个程序集解析器

其中 Resolver 方法的定义如下:

我知道 Resolver 可以通过它选择的任何方式生成程序集。在我的应用程序的情况下,它做了一个

其中name是嵌入资源的名称。然后读取该资源的所有字节,并对读取的字节块执行 Assembly.Load(byte[])。

起初,这对您来说可能听起来很奇怪,但它确实有效。

你可能会说,你到底为什么要嵌入一个程序集,而不仅仅是 ILMerge? 好问题。我认为我需要嵌入,因为嵌入式程序集已签名,并且我没有重新签署合并程序集的密钥。所以我嵌入。

问题是这样的:假设我在类上声明了一个私有实例成员变量,它是在嵌入式程序集中定义的类型。就我而言,它是一个枚举,我还初始化了该枚举的值。

现在,如果静态构造函数已经运行,那么该私有成员上的初始化程序将没有问题运行。但我看到的是“找不到文件”错误 - 您的基本 Fusion 错误。

如果我删除私​​有实例变量,那么我不会收到 Fusion 错误。

我可以使用该类型的变量,或者稍后在嵌入式程序集中定义的任何其他类型,只要它们没有被初始化为类中的成员实例变量。我可以在实例方法中使用类型,没问题。


写这篇文章,我想我可能已经想出了我自己问题的答案。也许这是一个 JIT 时间问题:也许实例构造函数在静态构造函数运行之前是 JIT 的。这会,也许?导致Fusion错误?

有人有任何见识吗?

这不是一个非常关键的问题,因为我可以重新设计类来避免这个问题,删除所有依赖于嵌入式程序集的实例变量。但我想理解它。

0 投票
1 回答
4668 浏览

c# - Fusion loader 找不到实际存在的 DLL

有谁知道什么会导致 Fusion 加载程序在没有警告或确认的情况下简单地跳过 DLL?

当我尝试从命令行应用程序执行此操作时(在 C# 中)

我看到这个:

“无法加载一种或多种请求的类型。检索 LoaderExceptions 属性以获取更多信息。”

该 DLL 依赖于 Platform.DLL,但该依赖项的加载失败,因此这行代码会引发异常。当我检查 Fusion 程序集加载消息时,我看到的是:

问题是,DLL存在c:\Deploy\bin\Platform.DLL,具有正确的版本并且没有签名的公钥。

我想到的事情:
1.也许它真的是Platform.DLL的依赖被破坏了,导致这种行为?(我在 Reflector 中搜索了依赖树,但没有发现丢失的 DLL)
2. 可能是发布/调试不匹配,或者是 64 位与 32 位?但一切都建立在同一台机器上
3. 也许我误读了日志,但是当它遇到它找到的 DLL 时它不应该停止吗?我在此日志中看不到“成功”或“不成功”消息。我只知道它因为异常而失败。

PS 更多技术细节:
机器环境是 Windows 2008 64 位,安装了 .NET 2.0、3.0 和 3.5。
相同的应用程序在另一台机器(Vista 32 位)上运行良好,具有相同的目录结构和 DLL,尽管这些是在该机器上构建的

0 投票
2 回答
7935 浏览

asp.net - 为什么融合不记录绑定错误?

我已将以下内容添加到注册表项 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion:

  • EnableLog DWORD 1
  • 日志失败 DWORD 1

如果我从 Visual Studio 启动一个 ASP.NET 网站,它会引发解析器错误:

无法加载文件或程序集 'CMS.Controls, Version=4.1.3518.21577, Culture=neutral, PublicKeyToken=834b12a258f213f9' 或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

现在,如果我刷新或重新启动程序集绑定日志查看器,它是空的。它不应该记录这个错误吗?

只有当我将 DWORD ForceLog 1 添加到注册表时,它才会记录错误。但是随后日志也填满了所有成功的绑定,并且由于它没有按名称排序,因此很难在列表中找到错误。

谢谢!