【问题标题】:Visual Studio extension could not find a required assemblyVisual Studio 扩展找不到所需的程序集
【发布时间】:2015-06-04 09:47:25
【问题描述】:

我为 Visual Studio 2013 编写了一个扩展。由于bloody ComboBox bug,我不得不在我的项目中包含 System.Windows.Interactivity。要添加更多详细信息:

  1. 使用额外的解决方案程序集,例如 .Editor,其中包含物理编辑器。
  2. .Editor 引用 System.Windows.Interactivity
  3. 也引用 System.Windows.Interactivity。其实我是用nuget来加载Expression.Blend.Sdk包的(兼容WPF 4.5)

效果:当包含提到的ComboBox的部分编辑器显示时,我立即得到一个异常:

在 PresentationFramework.dll 中发生了“System.Windows.Markup.XamlParseException”类型的第一次机会异常

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

我在实验实例和文件夹中运行扩展:

C:\Users\<user>\AppData\Local\Microsoft\VisualStudio\12.0Exp\Extensions\<Company>\<Extension>\1.0

包含 System.Windows.Interactivity.dll,但由于某种原因,IDE 似乎看不到它。

更奇怪的是,我正在使用其他附加包,例如 IronPython,它们从来没有给我带来过这样的麻烦。

我该如何解决这个问题?


编辑: 回应 cmets

实际上,InnerException 包含名为FusionLog 的字段,其中包含以下内容:

=== Pre-bind state information ===
LOG: DisplayName = System.Windows.Interactivity, PublicKeyToken=31bf3856ad364e35
 (Partial)
WRN: Partial binding information was supplied for an assembly:
WRN: Assembly Name: System.Windows.Interactivity, PublicKeyToken=31bf3856ad364e35 | Domain ID: 1
WRN: A partial bind occurs when only part of the assembly display name is provided.
WRN: This might result in the binder loading an incorrect assembly.
WRN: It is recommended to provide a fully specified textual identity for the assembly,
WRN: that consists of the simple name, version, culture, and public key token.
WRN: See whitepaper http://go.microsoft.com/fwlink/?LinkId=109270 for more information and common solutions to this issue.
LOG: Appbase = file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/
LOG: Initial PrivatePath = NULL
Calling assembly : (Unknown).
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Users\<user>\AppData\Local\Temp\devE4FC.tmp
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/System.Windows.Interactivity.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/System.Windows.Interactivity/System.Windows.Interactivity.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/PublicAssemblies/System.Windows.Interactivity.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/PublicAssemblies/System.Windows.Interactivity/System.Windows.Interactivity.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/PrivateAssemblies/System.Windows.Interactivity.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/PrivateAssemblies/System.Windows.Interactivity/System.Windows.Interactivity.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/CommonExtensions/Microsoft/TemplateProviders/System.Windows.Interactivity.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/CommonExtensions/Microsoft/TemplateProviders/System.Windows.Interactivity/System.Windows.Interactivity.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/CommonExtensions/Platform/Debugger/System.Windows.Interactivity.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/CommonExtensions/Platform/Debugger/System.Windows.Interactivity/System.Windows.Interactivity.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/PrivateAssemblies/DataCollectors/System.Windows.Interactivity.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/PrivateAssemblies/DataCollectors/System.Windows.Interactivity/System.Windows.Interactivity.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/PrivateAssemblies/DataCollectors/x86/System.Windows.Interactivity.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/PrivateAssemblies/DataCollectors/x86/System.Windows.Interactivity/System.Windows.Interactivity.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/System.Windows.Interactivity.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/System.Windows.Interactivity/System.Windows.Interactivity.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/PublicAssemblies/System.Windows.Interactivity.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/PublicAssemblies/System.Windows.Interactivity/System.Windows.Interactivity.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/PrivateAssemblies/System.Windows.Interactivity.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/PrivateAssemblies/System.Windows.Interactivity/System.Windows.Interactivity.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/CommonExtensions/Microsoft/TemplateProviders/System.Windows.Interactivity.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/CommonExtensions/Microsoft/TemplateProviders/System.Windows.Interactivity/System.Windows.Interactivity.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/CommonExtensions/Platform/Debugger/System.Windows.Interactivity.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/CommonExtensions/Platform/Debugger/System.Windows.Interactivity/System.Windows.Interactivity.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/PrivateAssemblies/DataCollectors/System.Windows.Interactivity.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/PrivateAssemblies/DataCollectors/System.Windows.Interactivity/System.Windows.Interactivity.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/PrivateAssemblies/DataCollectors/x86/System.Windows.Interactivity.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/PrivateAssemblies/DataCollectors/x86/System.Windows.Interactivity/System.Windows.Interactivity.EXE.

但还有更多。我使用 ProcMon 检查,Visual Studio 在哪里寻找那个 DLL,最后注意到了:

08:46:46,7508050    devenv.exe  7544    CreateFile  C:\Users\<user>\AppData\Local\Microsoft\VisualStudio\12.0Exp\Extensions\<Company>\<Extension>\1.0\Lib\System.Windows.Interactivity  NAME NOT FOUND  Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a
08:46:46,7509231    devenv.exe  7544    CreateFile  C:\Users\<user>\AppData\Local\Microsoft\VisualStudio\12.0Exp\Extensions\<Company>\<Extension>\1.0\Lib\System.Windows.Interactivity.EXE  NAME NOT FOUND  Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a
08:46:46,7510379    devenv.exe  7544    CreateFile  C:\Users\<user>\AppData\Local\Microsoft\VisualStudio\12.0Exp\Extensions\<Company>\<Extension>\1.0\Lib\System.Windows.Interactivity.DLL  NAME NOT FOUND  Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a

Lib 文件夹包含一些我正在使用的 Python 模块(出于脚本目的,因为我正在使用 IronPython)。而且,具有讽刺意味的是,该程序集位于

C:\Users\<user>\AppData\Local\Microsoft\VisualStudio\12.0Exp\Extensions\<Company>\<Extension>\1.0\

文件夹(没有 Lib)。但是 Visual Studio 在搜索中忽略了它,尽管事实上它是最自然的搜索位置(因为请求程序集也驻留在那里)

【问题讨论】:

  • 您能否尝试使用assembly binding log viewer 捕获绑定日志,以查看 fusion 尝试从何处加载该程序集?
  • @rene 我编辑了我的帖子以包含更多信息。
  • 尝试将该 dll 复制到日志中提到的任何路径中。我会亲自将该程序集放在...\PublicAssemblies
  • @rene 当然,我之前尝试过并且成功了,但是我不能要求插件的用户在某处手动复制程序集 :) 问题是,我如何通知 Visual Studio 在哪里寻找程序集?为什么 IronPython 加载没有问题而 System.Windows.Interactivity 没有?
  • 当然,至少我们确定这是一个有约束力的问题,而不是其他模糊的东西......

标签: c# .net wpf visual-studio-2013 vsix


【解决方案1】:

使用 Microsoft.Xaml.Behaviors.Wpf 而不是 System.Windows.Interactivity 问题就消失了。

迁移方法如下:https://devblogs.microsoft.com/dotnet/open-sourcing-xaml-behaviors-for-wpf/ (基本上:安装nuget,替换xaml文件中的xmlns命名空间。)

【讨论】:

  • 我目前正在使用Microsoft.Xaml.Behaviors.Wpf,但我仍然遇到这个确切的问题。一旦我按照this comment 中的建议进行操作,问题就消失了。 “另一个可能对某些人有所帮助的想法:必须命名程序集“i”中的至少一个元素,以便 VS 正确连接程序集。 – Amadeusz Wieczorek 2014 年 6 月 18 日 16:44"
【解决方案2】:

我有同样的问题。以下解决方案对我有用。

  1. 创建一个文本文件名为“MyDef.pkgdef”
  2. 将内容更改为

[$RootKey$\BindingPaths{some_guid}]
"$PackageFolder$"=""

  1. 在 .vsixmanifest 文件中添加资产

  1. 确保引用的 dll 必须经过签名,并且“复制本地”属性必须为真。

【讨论】:

    【解决方案3】:

    这是解决此问题的方法。我不喜欢它,但它有效:)

    解决方案是从源代码强制加载程序集,这样 PresentationFramework 就不必在解析 XAML 文件时寻找它。例如:

    private static void LoadSystemWindowsInteractivity()
    {
        // HACK: Force load System.Windows.Interactivity.dll from plugin's 
        // directory
        typeof(System.Windows.Interactivity.Behavior).ToString();
    }
    
    static MyEditorFactory()
    {
        LoadSystemWindowsInteractivity();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-13
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-17
      • 2021-10-09
      • 1970-01-01
      相关资源
      最近更新 更多