问题标签 [assembly-resolution]

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 投票
4 回答
5103 浏览

silverlight - silverlight 4,动态加载 xap 模块

我知道可以使用 Prism 或 MEF 框架动态加载 xap 模块。但是,我不想使用这些框架;而是手动加载我的 xap 文件。所以,我创建了以下类(改编自互联网):

上面的代码工作正常;我可以通过以下方式加载任何 xap:

现在,我在 Sales.xap 项目中有一个名为 InvoiceView 的 UserControl,所以我想实例化该类。在当前项目(Main.xap)中,我添加了对 Sales.xap 项目的引用,但是,由于我手动加载它,我设置了“Copy Local = False”。但是在执行时,下面的代码会抛出 TypeLoadException:

似乎代码找不到 InvoiceView 类。但是我检查了 XapLoader 的 initXap() 方法是否成功执行。那么为什么代码找不到 InvoiceView 类呢?有人可以帮我解决这个问题吗?

0 投票
2 回答
1681 浏览

msbuild - MsBuild 没有在好目录中查找自定义任务的二级依赖

我写了一个 MsBuild 任务:MyTask。在我的解决方案中,我有 Task 项目和其他项目。MyTask 引用了一个项目(比如 ProjA),该项目引用了第三个程序集,比如(dep1 和 dep2)。

这些项目都构建得很好,我将输出放在一个目录(编译)中。在这个目录中,我有我想要的所有 dll:MyTask.dll、ProjA.dll、dep1.dll、dep2.dll 等。

在我的 MsBuild 文件中,我包含自定义任务程序集:

然后我调用 MyTask 程序集的一个任务。该调用执行良好,但 MsBuild 抱怨找不到 dep1 和 dep2 程序集(尽管它们位于同一目录中):

错误:无法加载文件或程序集“dep1,版本=2.0.0.0,文化=中性,公共密钥令牌=9109c11469ae1bc7”或其依赖项之一。该系统找不到指定的文件。

我可以通过将 dep1.dll 和 dep2.dll 复制到 c:\windows\microsoft .net\framework\v4.0\ 来解决这个问题,但我不想这样做,因为它在构建其他项目时会引发问题(赢了t 将 dep1.dll 和 dep2.dll 复制到输出目录...)。

有没有人有同样的问题,或者更好的解决方案?


编辑

这是 Fusion Log Viewer 的输出

如果我将 MsBuild.exe 复制到我所有 dll 所在的目录中,它工作正常......
MsBuild 似乎不会在我的 Compil 目录中查找 dep1.dll 和 dep2.dll,即使它在其中找到 ProjA.dll .. .


编辑

至于我的绑定是如何完成的:MyTask 通过以下方式引用 ProjA 项目:

ProjA 通过

0 投票
2 回答
2954 浏览

.net - 未找到程序集引用,即使程序集位于同一目录中

我们目前正在为某些软件开发插件。我们决定使用 .NET 进行开发,即使应用程序是用某种本地语言编写的。由于在 .NET 中直接创建外部接口存在一些问题,我们决定在 C++/CLI 中构建一个桥接 DLL,它会进行一些基本的初始化,然后加载我们的托管程序集并从中创建一个用户控件。

在加载项 .ini 文件中,C++/CLI DLL 按名称引用,因此应用程序将从那里加载它。但是,.NET DLL 只是从 C++/CLI DLL 引用(作为托管引用),因此导出的类型可用。然而,在此设置中,应用程序在加载 .NET DLL 时会崩溃。

我们很快发现我们可以只订阅AppDomain.AssemblyResolve事件以从 C++/CLI DLL 所在的同一目录加载 .NET 程序集,因此问题本身就解决了。

实际的问题是:为什么加载程序找不到 .NET DLL,即使它与引用它的程序集位于同一目录中?我一直希望加载程序集会首先查看同一个目录,而不是仅仅查看当前工作目录。如果可执行文件更改其工作目录,为什么它会找到程序集?或者如果通过加载 C++/CLI 程序集(而不是纯托管应用程序)调用 CLR,情况会有所不同吗?

0 投票
2 回答
1382 浏览

visual-studio-2008 - 添加引用会添加错误的版本

添加对 VS 2008 的引用时,版本应列为 v1.0.0.0,而应为 v1.1.0.0 - 据我所知,绝对没有理由添加错误的版本。

这两个项目都是从头开始编写的,没有其他参考引用我要添加的程序集,当我在 Windows 中查看文件时,它具有正确的版本,但不知何故 VS 仍然选择了错误的版本(目标路径是正确的)。

有谁知道如何让 VS 选择我指向的版本,而不是它决定的某个旧版本(完全没有理由)是正确的版本?

我之前问过这个问题,但没有解决问题的答案......

我肯定选择了正确的文件。

0 投票
1 回答
257 浏览

c# - C# 自主更新

在我的新项目(windows-C#-vs2008)中,我希望可执行文件能够自动更新自身——也许从网络服务器这里我所做的是将任何更新的 dll 下载到“隔离存储”(每个作为单独的 dll)然后修改CurrentDomain_AssemblyResolve() 方法

这样它在从可执行文件加载之前首先检查其隔离存储中是否存在库。但是,如果我想更改主 exe 中的某些内容怎么办。[我尝试创建一个加载程序项目(控制台 ap),它从中调用我的主程序(将输出更改为 dll),但是这次程序集解析事件没有被触发,因为参考 dll 是在新加载程序的 bin 文件夹下生成的编译期间的项目]任何帮助将不胜感激..

0 投票
2 回答
16721 浏览

c# - AppDomain.CurrentDomain.AssemblyResolve 请求一个.resources 大会?

使用代码如何将附属程序集嵌入到csharptest.net 提供的 EXE 文件中,我创建了一个自定义程序集解析器并将我的程序集嵌入到我的资源中。

我可以成功解决我使用的程序集,但不知何故 AppDomain.CurrentDomain.AssemblyResolve 要求一个名为“AppName.resources”的程序集,特别是“MyProgram.resources,Version=0.15.3992.31638,Culture=en-US,PublicKeyToken=null”,我不知道不知道怎么解决?

我试图禁用从资源加载我的自定义程序集(将我所有的程序集 dll 放在程序目录中)并且刚刚启用 AppDomain.CurrentDomain.AssemblyResolve,但它仍然要求它。

我对此有点困惑,如果您能帮助我,将不胜感激。

这是我感兴趣的代码;

0 投票
2 回答
1092 浏览

.net - 为多个可执行文件配置一次 assemblyBinding

我有一个包含多个可执行文件的文件夹。目前在每个executable.exe.config文件中都配置了程序集绑定重定向。有没有办法只配置一次,该文件夹中的所有可执行文件都会自动选择它?我想避免 machine.config 因为这会将它应用于整个计算机。

0 投票
1 回答
421 浏览

c# - 运行时换出编译时静态引用的程序集

在什么情况下,我可以将在编译时静态引用的程序集换成另一个在运行时使用的程序集?例如:

应用程序组装:

  • 参考 通用程序集
  • ServiceProviderFactory服务组装中的引用

普通组装:

  • 定义IServiceProvider

服务组装:

  • 提供ServiceProviderFactoryIServiceProviders 的工厂)
  • 参考 通用程序集

鉴于上述情况,我希望能够在安装时更换服务程序集,但我不知道在什么条件下新的服务程序集将继续加载。

我相信以下必须成立:

  1. 相同的程序集名称,
  2. 弱命名程序集或强命名程序集中的相同版本号,以及
  3. ServiceProviderFactory签名保持不变。

注意:使用反射和搜索服务程序集的实现似乎IServiceProvider比依赖一些ServiceProviderFactory具有固定签名的实现更好,但我仍然对上述答案感兴趣。

0 投票
1 回答
854 浏览

winforms - WinForms 应用程序配置管理器是 x86 并且不能引用针对任何 CPU 的程序集

您好,我使用的是 Win7 64x 和 Visual Studio 2010。我创建了一个针对任何 CPU 的库/框架。然后我创建了一个使用该框架的新 WinForms 项目,保留向导的默认值。我的意思是,我没有改变任何东西。当我引用我的框架时,VS 找不到程序集。如果我转到项目属性,它的目标是任何 CPU(如预期的那样,我可以根据需要更改它)。但是,如果我转到 Configuration Manager,我对该项目的唯一选择是 x86。我想这就是问题所在。我尝试将 Any CPU 添加为新目标,但无法添加。

有人可以帮助我吗?:)

提前致谢!

0 投票
2 回答
752 浏览

c# - 为什么我要使用 Assembly.LoadFile 代替 Assembly.LoadFrom?

我的印象是Assembly.LoadFrom使用 ApplicationBase 和 PrivateBinPath。我的印象是 Assembly.LoadFile 没有。

为什么有人要使用 LoadFile?换句话说,如果我的理解是正确的,为什么有人不想使用 ApplicationBase 和 PrivateBinPath?

我正在处理一些使用 LoadFile 的现有代码,但我不明白它为什么会这样做。LoadFile 显然不会从同一目录加载依赖项。LoadFrom 方法确实加载依赖项(来自文档:加载源上下文...允许找到并加载该路径上的依赖项,因为路径信息由上下文维护。)我想将其从使用 LoadFile 转换, 使用 LoadFrom。

如果我用 LoadFrom 替换 LoadFile,如果有的话,可能会破坏什么?

即使它是良性的,也可能是我无法根据项目时间表进行更换。如果我不能用 LoadFrom 替换 LoadFile,有没有办法说服用 LoadFile 加载的程序集加载依赖项?是否有我可以使用的打包技巧(嵌入式程序集、ILMerge、AssemblyResolve 事件等)可以允许加载了 LoadFile 的程序集也加载其依赖项?