问题标签 [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.
.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> 元素?
提前致谢!
.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?
msbuild - 如何解决:自定义 MSBuild 任务需要在 AppBase 之外进行组装
我有一个自定义任务,我想在构建我的 C# 项目时执行。此任务位于 MyTask.dll 中,它引用另一个程序集 MyCommon.DLL。
问题是 MyCommon.dll 相对于 MyTask.dll 位于“..\Common\MyCommon.dll”,这将其置于 MSBuild 进程的 AppBase 目录之外。通过分析 MSBuild 的日志并查看 Fusion 关于绑定失败的报告,我已经确认这确实是问题所在。
如何让 Fusion 在构建过程中找到 MyCommon.dll?请注意,移动程序集会破坏我的应用程序,这也取决于它。
更新:好吧,看来我还是会使用副本。其他解决方案都需要在系统范围内进行修改,这在这里并不真正保证。
.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?我很困惑...
c# - TypeLoadException 说'没有实现',但它已实现
我在我们的测试机器上有一个非常奇怪的错误。错误是:
System.TypeLoadException: Method 'SetShort' in type 'DummyItem' from assembly 'ActiveViewers (...)' does not have an implementation.
我只是不明白为什么。SetShort
在DummyItem
课堂上,我什至重新编译了一个写入事件日志的版本,以确保它不是部署/版本控制问题。奇怪的是调用代码甚至没有调用SetShort
方法。
dll - 如何发送 gdiplus.dll 但不让 Windows 使用它?
我有一个依赖于 gdiplus 的应用程序。我需要该应用程序也可以在 Windows 2000 上运行。
我想将 GDIPlus 包含在应用程序目录中,以便 Windows 2000 计算机能够运行,但如果机器是 Windows XP、Windows Vista、Windows 7 等,我希望它使用随附并更新的 GDIPlus 版本,与 Windows。
不可能?
windows - 指示Window的fusion loader先使用系统dll?
我需要在应用程序目录中为 Windows 2000 上的用户部署一个带有 DLL的应用程序。该 dll 是后来作为系统 dll 随 Windows XP 一起提供的。
Windows XP 也是在 Microsoft 引入 Fusion 加载程序时,用于解决程序集依赖性。
是否可以指示不使用我文件夹中的 dll 版本,而是始终使用系统提供的该 dll的最新版本?而且Windows 2000 没有Fusion 加载程序,也没有dll,所以它只会使用我文件夹中的版本吗?
.net - C# 类的构造函数顺序:参数化、默认和静态?
假设我有一个具有 3 个构造函数、一个默认(无参数)构造函数、一个参数化构造函数和一个静态构造函数的类。像这样:
假设我调用参数化构造函数,这些构造函数以什么顺序执行?
我认为它是静态的,然后是参数化的,然后是默认的。但是……我的经验并不同意这一点。
背景:我有一个将引用的 DLL 作为资源嵌入的应用程序。在运行时,应用程序通过以下方式注册一个程序集解析器
其中 Resolver 方法的定义如下:
我知道 Resolver 可以通过它选择的任何方式生成程序集。在我的应用程序的情况下,它做了一个
其中name是嵌入资源的名称。然后读取该资源的所有字节,并对读取的字节块执行 Assembly.Load(byte[])。
起初,这对您来说可能听起来很奇怪,但它确实有效。
你可能会说,你到底为什么要嵌入一个程序集,而不仅仅是 ILMerge? 好问题。我认为我需要嵌入,因为嵌入式程序集已签名,并且我没有重新签署合并程序集的密钥。所以我嵌入。
问题是这样的:假设我在类上声明了一个私有实例成员变量,它是在嵌入式程序集中定义的类型。就我而言,它是一个枚举,我还初始化了该枚举的值。
现在,如果静态构造函数已经运行,那么该私有成员上的初始化程序将没有问题运行。但我看到的是“找不到文件”错误 - 您的基本 Fusion 错误。
如果我删除私有实例变量,那么我不会收到 Fusion 错误。
我可以使用该类型的变量,或者稍后在嵌入式程序集中定义的任何其他类型,只要它们没有被初始化为类中的成员实例变量。我可以在实例方法中使用类型,没问题。
写这篇文章,我想我可能已经想出了我自己问题的答案。也许这是一个 JIT 时间问题:也许实例构造函数在静态构造函数运行之前是 JIT 的。这会,也许?导致Fusion错误?
有人有任何见识吗?
这不是一个非常关键的问题,因为我可以重新设计类来避免这个问题,删除所有依赖于嵌入式程序集的实例变量。但我想理解它。
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,尽管这些是在该机器上构建的
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 添加到注册表时,它才会记录错误。但是随后日志也填满了所有成功的绑定,并且由于它没有按名称排序,因此很难在列表中找到错误。
谢谢!