无法加载文件或程序集“System.Windows.Interactivity”[重复]

Posted

技术标签:

【中文标题】无法加载文件或程序集“System.Windows.Interactivity”[重复]【英文标题】:Could not load file or assembly 'System.Windows.Interactivity' [duplicate] 【发布时间】:2012-11-10 22:19:06 【问题描述】:

我刚刚添加了 System.Windows.Interactivity 程序集。 XamlParse 在运行时抛出异常:

无法加载文件或程序集'System.Windows.Interactivity, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。这 系统找不到指定的文件。

Google 搜索仅找到与 prism 相关的结果 - 我不使用它。

知道为什么会这样吗?

【问题讨论】:

它是Expression Studio的一部分 所以?我应该安装一些东西吗? 只是猜测,可能你没有引用 MAIN 项目中的库? 另一个可能对某些人有所帮助的想法:必须命名程序集“i”中的至少一个元素,以便 VS 正确连接程序集。 @AmadeuszWieczorek :请添加您的解决方案作为答案,它对我帮助很大。谢谢。 【参考方案1】:

只是猜测,可能是您没有引用 MAIN 项目中的库。

这件事发生在我身上好几次了。

【讨论】:

嘎。当程序集 A 需要添加时,我讨厌它(似乎是随机引用以消耗程序集 B。我希望这些工具可以自己解决这个问题。 刚刚偶然发现这个......但它绝对有帮助。我从来没有想过这个。【参考方案2】:

Tilak 的回答帮了我很大的忙,但我还需要在 XAML 代码中命名来自程序集“i”的至少一个元素。 命名元素后,Visual Studio 会正确连接程序集。

改变

<i:InvokeCommandAction Command="Binding MyCommand"/>

进入

<i:InvokeCommandAction Command="Binding MyCommand" x:Name="interactivityFix" />

只需对整个 XAML 文件中的一个元素执行此操作。

【讨论】:

我的窗口是从非 WPF 应用程序中的 DLL 调用的。这似乎可以解决问题,谢谢! 我所要做的只是根据这个答案添加一个名字。绝对让我对工具充满信心...... 我与@Kolky 处于相同的环境中,我不会相信这会成功。然而它确实...... 我的 VS 扩展程序 Start Page+ 发生了这种情况。 XAML 位于ToolWindow 中,位于与 VSIX 项目不同的项目中。遵循 Tilak 的建议对我的情况没有帮助,但遵循 Amadeusz 的建议对我有帮助,但我只需要命名技巧,而不是两个答案。 这个名字细节是我唯一需要做的事情。如果您遇到此问题,请先尝试使用名称技巧。在确认确实有必要之前不要添加任何额外的引用,因为它们可能不是。【参考方案3】:

有时,当您添加新库时,会引入 System.Windows.Interactivity.dll 的冲突版本。

这会阻止项目工作。

要解决此问题,请通过编辑您的 app.config 添加一个程序集绑定重定向,使其看起来像这样:

<?xml version="1.0"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Windows.Interactivity"
                          publicKeyToken="31bf3856ad364e35"
                          culture="neutral"/>
        <bindingRedirect oldVersion="4.0.0.0"
                         newVersion="4.5.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup>
  <appSettings>
    <add key="TestKey" value="true"/>
  </appSettings>
</configuration>

不用担心更改 PublicKeyToken,这在所有版本中都是不变的,因为它取决于 .dll 的名称,而不是版本。

确保将appConfig 中的newVersion 与您最终指向的实际版本相匹配:

【讨论】:

【参考方案4】:

你可以在 Blend SDK 中找到这个 dll。

下面是它的链接:

http://www.microsoft.com/en-us/download/details.aspx?id=10801

【讨论】:

【参考方案5】:

您可以扫描每个项目的 System.Windows.Interactivity 版本,例如。 4.0.0.0 或 4.5.0.0。此外,可能引用的第三方 dll 之一可能取决于 System.Windows.Interactivity。因此,请确保在整个项目中对齐版本。这必须解决您的问题。

【讨论】:

与其说“这必须解决你的问题”,不如试着说一些不那么有力的话。如果它没有修复它(而且由于帖子已经 3 年了,它可能已经修复了),那么你的答案将被否决。【参考方案6】:

您可以检查项目属性 -> 构建 -> 输出路径。

使用 Windows 资源管理器转到输出路径导向器。 然后查看该文件夹中是否存在“System.Windows.Interactivity.dll”。 可能是因为 CopyLocal 标志为 false 或者有原因导致输出路径文件夹中没有生成 dll 文件。

【讨论】:

【参考方案7】:

这是今天早上的任务。我们的问题只是安装程序移动了 DLL 的位置。有时这不是一个微妙的版本不匹配:一个简单的错位会导致相同的迹象。您可以使用Fuslogvw.exe 来帮助诊断。一旦您 (a) 记得使用管理员权限启动该工具并 (b) 配置该工具以向您显示绑定失败(“设置”),您将看到如下日志条目:

LOG: DisplayName = System.Windows.Interactivity, PublicKeyToken=31bf3856ad364e35 (Partial) WRN: Partial binding information was supplied for an assembly: [ red herring, not a problem for us ] ... LOG: GAC Lookup was unsuccessful [ another red herring: System.Windows.Interactivity.dll is not a core assembly and not registered in the GAC by default ] LOG: Attempting download of new URL file:///C:/Program Files (x86)/<path>/System.Windows.Interactivity.DLL. ... LOG: All probing URLs attempted and failed. 将 DLL 放在它所属的位置后,日志将如下所示: LOG: GAC Lookup was unsuccessful. LOG: Attempting download of new URL file:///C:/Program Files (x86)/<path>/System.Windows.Interactivity.DLL. LOG: Assembly download was successful. Attempting setup of file: C:\Program Files (x86)\<path>\System.Windows.Interactivity.dll

【讨论】:

以上是关于无法加载文件或程序集“System.Windows.Interactivity”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从另一个 WPF 应用程序加载 WPF 应用程序程序集,出现错误:无法在同一个 AppDomain 中创建多个 System.Windows.Application 实例

能加载文件或程序集“Aspose.Cells”或它的某一个依赖项。无法验证强名称签名

无法加载文件或程序集,但已加载

无法加载文件或程序集 'PayPalAdaptivePaymentsSDK,版本 = 2.12.117.0

无法加载文件或程序集。找到的程序集的清单定义与程序集引用不匹配

无法加载文件或程序集'netstandard,版本 = 2.0.0.0