问题标签 [assemblybinding]
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.
c# - DNX451 assemlyBinding 重定向失败
每当我尝试在具有默认 clr 运行时的 DNX451 应用程序上运行dnu
或命令时,我都会不断收到程序集绑定错误,如下所示:dnx
它似乎在当前文件路径中查找 dll,而不是在 lib 或 packages 文件夹中。然后它只是停止执行命令。
每当我将所需的 dll 粘贴到 bin 中时,它似乎都可以作为临时解决方法,但这不是数十个 dll 的选项......
奇怪的是,coreclr 运行时不会出现这个问题,只有默认的 clr 才会出现这个问题。
有谁知道为什么会这样?我在另一台机器上尝试过,它也抛出了融合日志,但似乎运行得很好。
更新信息
我运行了以下命令:
yo aspnet
(约曼)-> 空应用程序dnu restore
nservicebus - NServiceBus 似乎通过 Ionic.Zip.dll 硬引用 2.0.0.0 版本
我在一个复杂的解决方案中使用 NServiceBus(150 多个项目,其中许多使用 NSB)。直到昨晚,当我无法忍受时,每个项目都有自己的目标目录(./bin/debug 和./bin/release)。由于我的项目之间存在依赖关系,我多次构建和重新构建相同的二进制文件,因此我们决定将整个项目更改为共享输出目录,这极大地缩短了解决方案的构建时间。到目前为止,一切都很好...
但是,当我尝试启动我的项目时,它无法开始给我错误:
哦,哦。因此,我尽职尽责地调高了日志的详细程度,清理并重建了整个混乱,以便在日志输出中找到它:
出来了 Dependency Walker(很棒的工具,顺便说一句)。好的,那么什么取决于旧的 2.0 框架?寻找对 mscorlib 的每一个引用,并且......其中一个与另一个不同......
NServiceBus.Hosting.Azure 依赖于 Ionic.Zip.dll,而后者又依赖于 mscorlib.dll 的 2.0.0.0 版本。哎哟。FWIW,这样做的 NServiceBus.Hosting.Azure 版本是 5.3.2.0。
这在我看来类似于这里的问题:https ://github.com/Particular/NServiceBus/issues/664
我可以通过程序集绑定重定向解决这个问题吗?有什么方法可以让 NSB 告诉 Ionic.Zip.dll 4.0.0.0 版本的 mscorlib.dll 没问题,非常感谢?
或者这是一个 NSB 错误?
提前致谢。
c# - 程序集试图解决错误的程序集版本
好吧,我有一个包含 2 个项目的解决方案:其中一个是 winforms 项目,另一个是控制台应用程序。每次执行时,winforms 项目都会以控制台应用程序 .exe 文件作为参数启动一个进程。
问题是:控制台项目 - 在 cmd.exe 中执行时 - 正确加载所有必要的程序集,但是当通过 winforms 项目执行时,无法加载某些程序集并尝试解决它,尽管正确的程序集位于 . exe文件。更具体地说,当控制台应用程序单独执行时,成功加载已经编译的Newtonsoft.Json.dll 8.0版,但是当它通过winforms应用程序启动时,它无法解析程序集并尝试加载6.0版并失败.
我正在使用 VS 2015 并且Newtonsoft.Json.dll引用由 Nuget 管理。
有人可以帮我这里有什么问题吗?
c# - Asp MVC WebApi & .Net Core 构建导致二进制文件冲突
在过去的几天里,我一直在为此拔头发。
我在同一个解决方案中有一个 MVC WebApi 项目(api)和一个 ASP.NET Core 站点(演示文稿)。两者都针对 .Net Framework 4.6.1
他们每个人都可以独立工作。
演示项目依赖于(不是以二进制/引用方式)其数据的 api 项目。
当我构建演示站点时,它会将各种二进制文件的错误版本放入 api bin 文件夹中。这意味着我实际上无法轻松调试这两个项目,因为 Web 配置中的绑定重定向会爆炸。
无法加载文件或程序集“System.Net.Http.Formatting”或其依赖项之一
如果我删除 api bin 文件夹并构建演示文稿,我会在 api bin 文件夹中得到少量二进制文件(虽然不是 api 主二进制文件本身)。
我能做些什么来阻止演示文稿构建将二进制文件放在错误的位置吗?
所有 nuget 包都被合并并且都指向 4.6.1
(是的,我已经在寻求将 api 迁移到 ASP.NET Core,因为理论上这应该可以解决问题,但我无法立即访问它)
任何帮助将非常感激!
c# - 无法加载文件或程序集或其依赖项之一。该系统找不到指定的文件
所以我的项目 X 引用了两个 3rd 方 nuget 包 A 和 B。两个包都引用了相同的 DLL,但版本不同。现在的问题似乎是在构建时,DLLv1 被 bin 文件夹中的 DLLv2 覆盖。并且在运行时,A 中的代码抱怨找不到 DLLv1。
我已经在 bin 文件夹中添加了一个程序集绑定配置文件以绑定到 DLLv2。但这似乎并没有改变什么。
这是一个使用 msbuild 构建的 CSharp 项目。
问题:
- AssemblyBinding 是解决这个问题的正确工具吗?
- 解决此问题的正确方法是什么?
.net - Debugging Visual Studio 2017 Extension Does Not Find Assembly
I'm trying to update my Diff All Files Visual Studio extension to support VS 2017. When debugging my extension it is complaining that it cannot find a required assembly:
I have confirmed that the file exists at C:\Users\Dan.Schroeder\AppData\Local\Microsoft\VisualStudio\15.0_b920d444Exp\Extensions\DansKingdom\Diff All Files for VS2017\1.0\QuickConverter.dll
and that it has the correct Name and PublicKey.
I have also captured the Fusion Logs (i.e. Assembly Binding Log Viewer) to capture the binding error, and it seems that VS is not looking for the dll file in the directory where it's located; rather than looking in the experimental extensions directory, it's looking in the actual VS 2017 directory. I captured this error, and another with the fully-qualified name that included the version, which is the correct version of the assembly:
Any thoughts as to why VS is not looking in the correct location to load that assembly? Or is there something else I'm missing?
I did not run into this issue when developing the extension for VS 2012, 2013, or 2015. I'm debugging the Visual Studio Extension by providing the rootsuffix Exp
command line argument, just like I did for previous Visual Studio versions.
If you want, you can download the source code and reproduce the issue for yourself (it's the AddVs2017Support
branch); just unload all projects except the VS.DiffAllFiles and VS.DiffAllFiles.VS2017 projects.
Any thoughts/suggestions are appreciated. Thanks.
Update 1
As per the link that Hans Passant provided, I tried adding a .pkgdef file to my project and including it as an asset in my .vsixmanifest file, but the problem still remains. When I look in the C:\Users\Dan.Schroeder\AppData\Local\Microsoft\VisualStudio\15.0_b920d444Exp\devenv.exe.config
file I still do not see any reference to my assemblies, so it doesn't seem to be adding anything to that file as it should. Also, the fusion logs still report the exact same information as I provided above.
When I try to generate the .pkgdef file manually (since it should be done automatically as part of the build process), I get the following error. I'm not sure if this is to be expected or not when trying to generate it outside of Visual Studio (I was just using a regular command prompt).
Again, these latest changes have been pushed to the source code on GitHub under the AddVs2017Support
branch for anyone who cares to take a look at the code to try and spot the problem.
Update 2
I also tried Resetting The Visual Studio 2017 Experimental Instance, as well as installing the vsix on my regular (non-experimental) VS 2017 instance, but it still results in the same error about not being able to find the assembly.
If I manually copy the dll file to the C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE
directory then it is found and I no longer get the error. I'm just not sure why Visual Studio is not looking for it in my extensions directory, when the exact same file does indeed exist there.
c# - 构建我的 .NET Web 应用程序时出现奇怪的 .NET 程序集警告
当我构建我的 ASP.NET Web 应用程序时,我在构建输出中看到以下奇怪的警告。
我的解决方案有两个项目:
- 网站 (ASP.NET v4.7)
- 测试 (.NET v4.7)
所以我不确定这些警告适用于哪个项目 - 哪个项目?
此外,我已经检查了 (website proj)web.config
和 (tests proj)app.config
并且AssemblyBindings
它们都指向最新的 .. 就像这两个文件中一样:
那么为什么编译器会认为与各种版本的 Newtonsoft.Json 存在冲突?我只安装了一个版本...
我还安装了程序集绑定,它们似乎都指向安装的最新版本。
更新
- 这是我的一个片段
packages.config
<package id="Newtonsoft.Json" version="10.0.2" targetFramework="net47" />
这在两个项目中,顺便说一句
更新 2
这hintpath
是两个项目相同的内容...
更新 3
好的 - 这很有趣。
- 打开
VERBOSE
构建信息 - 我现在可以看到更多的数据。第一个警告是说我的nuget 包
Google.Apis.QpxExpress.v1
最终Google.Apis.Core
依赖于 Json v 9.0.0。 - 我的 web.config 文件有绑定重定向!(看上面)。
c# - 当程序集与 main .exe 不在同一个文件夹中时,如何使用其相对地址绑定程序集?
我将这些行添加到 app.config 中:
但是我的控制台应用程序崩溃并且异常说:
CrashReporter.dll 是我在 consol 应用程序中引用的 c# 中的托管代码。但在 dll 参考的属性选项卡中,我设置Copy Local
为 false。因为在安装程序中,我想将其复制到 .\libs\CrashReporter.dll 文件夹中,并且与 .exe 文件不在同一个文件夹中。
如何告诉 .net 我将 dll 文件放在相对于 .exe 文件的 ../libs/ 文件夹中?
.net - System.Management.Automation.dll 版本控制混乱
我有一个“核心”程序集,其中包含一系列用 C# 编写的 PowerShell Cmdlet。我还有一个使用这个“核心”程序集的 WPF“gui”应用程序。为了使用和编译“核心”,我显然需要 PowerShell 的类型,因此我添加了对System.Management.Automation.dll
我的项目的引用。我通过简单地从我的本地机器 GAC 添加对该 DLL 的引用来做到这一点。一切都在我的机器上编译并顺利运行。
当我在另一台机器上部署和运行我的“gui”时,我得到了奇怪的错误。例如:
我已将原因缩小到这一点:我的“gui”实现了一个自定义 PowerShell 主机并加载“核心”并执行它的 cmdlet。它是这样完成的:
显然,PsInstance.Streams.Information
在运行时找不到该属性。
我发现System.Management.Automation.dll
我作为项目参考添加的那个不一定是加载的那个。该框架首先查看 GAC,如果它在那里找到一个副本,它会使用那个副本而不是我的副本。
我知道问题的原因是部署机器安装了旧版本的 PowerShell,它没有实现我正在使用的属性 - 并引发上述异常。
然而,我不明白的是:当它与我构建的程序集不兼容时,框架如何从 GAC 加载这个程序集?
据我所知,该框架使用 AssemblyVersion、Name 和 PublicKeyToken 来识别程序集。
我的本地集会(工作):
服务器组件(不工作):
这两个文件无疑是不同的。但根据 AssemblyName,它们是相同的。这样,框架将加载一个或另一个。
两个明显不同的文件(即使只看文件的大小)怎么会有相同的 AssemblyName 呢?
我想补充一点,目标机器是 Windows Server 2012R2,但它并不是我注意到这一点的唯一机器。我还在新安装的 Windows 7 和另一个 Windows 2012 Server 上注意到它。