VSX 2010包加载 - Markup.xaml解析无法找到程序集

时间:2010-12-18 16:14:01

标签: wpf visual-studio-2010 vsx

我构建了一个Wpf UserControl库,它包含一大组程序集,甚至引用了另外两个类库和几个合并的resourceDictionaries。它构建没有错误。我构建了一个简单的VSX包并引用了Wpf库,然后尝试运行它。在解析页面时,它只能找到我的xaml UserControl页面上引用的部分程序集。它为我提供了每个不可绑定程序集的融合日志中的错误消息。如果我删除“坏”程序集,它将继续解析为下一个不可用的程序集。它能够找到我引用的一个类库,但不能找到另一个。它们与不同的课程内容基本相同。

那么,有没有人有任何资源或答案呢?我的其他测试项目甚至包含WCF服务都没有问题,这对我来说是一个难题。

谢谢,Danny

===预绑定状态信息=== 日志:用户= AMRS \ dhoneycu 日志:DisplayName = System.Windows.Interactivity,PublicKeyToken = 31bf3856ad364e35  (部分) 警告:为程序集提供了部分绑定信息: 警告:程序集名称:System.Windows.Interactivity,PublicKeyToken = 31bf3856ad364e35 |域ID:1 警告:仅提供部分程序集显示名称时发生部分绑定。 警告:这可能导致装订器装入错误的装配。 警告:建议为程序集提供完全指定的文本标识, 警告:它由简单的名称,版本,文化和公钥令牌组成。 警告:有关此问题的更多信息和常见解决方案,请参阅白皮书http://go.microsoft.com/fwlink/?LinkId=109270。 日志:Appbase = file:/// C:/ Program Files / Microsoft Visual Studio 10.0 / Common7 / IDE / 日志:初始PrivatePath = NULL

调用程序集:(未知)。

日志:此绑定在默认加载上下文中启动。 日志:使用应用程序配置文件:C:\ Program Files \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ devenv.exe.Config 日志:使用主机配置文件: 日志:使用c:\​​ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config中的计算机配置文件。 日志:此时策略未应用于引用(私有,自定义,部分或基于位置的程序集绑定)。 日志:尝试下载新的URL文件:/// C:/ Program Files / Microsoft Visual Studio 10.0 / Common7 / IDE / System.Windows.Interactivity.DLL。 日志:尝试下载新的URL文件:/// C:/ Program Files / Microsoft Visual Studio 10.0 / Common7 / IDE / System.Windows.Interactivity / System.Windows.Interactivity.DLL。 日志:尝试下载新的URL文件:/// C:/ Program Files / Microsoft Visual Studio 10.0 / Common7 / IDE / PublicAssemblies / System.Windows.Interactivity.DLL。 日志:尝试下载新的URL文件:/// C:/ Program Files / Microsoft Visual Studio 10.0 / Common7 / IDE / PublicAssemblies / System.Windows.Interactivity / System.Windows.Interactivity.DLL。 日志:尝试下载新的URL文件:/// C:/ Program Files / Microsoft Visual Studio 10.0 / Common7 / IDE / PrivateAssemblies / System.Windows.Interactivity.DLL。 日志:尝试下载新的URL文件:/// C:/ Program Files / Microsoft Visual Studio 10.0 / Common7 / IDE / PrivateAssemblies / System.Windows.Interactivity / System.Windows.Interactivity.DLL。 日志:尝试下载新的URL文件:/// C:/ Program Files / Microsoft Visual Studio 10.0 / Common7 / IDE / CommonExtensions / Microsoft / TemplateProviders / System.Windows.Interactivity.DLL。 日志:尝试下载新的URL文件:/// C:/ Program Files / Microsoft Visual Studio 10.0 / Common7 / IDE / CommonExtensions / Microsoft / TemplateProviders / System.Windows.Interactivity / System.Windows.Interactivity.DLL。 日志:尝试下载新的URL文件:/// C:/ Program Files / Microsoft Visual Studio 10.0 / Common7 / IDE / PrivateAssemblies / DataCollectors / System.Windows.Interactivity.DLL。 日志:尝试下载新的URL文件:/// C:/ Program Files / Microsoft Visual Studio

2 个答案:

答案 0 :(得分:20)

您应该在VSPackage类上放置ProvideBindingPath属性。这将导致程序包程序集所在的目录被探测到无法找到的程序集(因为它们不驻留在默认的VS探测路径中)。为此,请在项目中包含以下文件:

%VSSDKInstallDir%\ VisualStudioIntegration \共同\源\ CSHARP \ RegistrationAttributes \ ProvideBindingPathAttribute.cs

然后,将以下属性添加到VSPackage类,如下所示:

[ProvideBindingPath] public class VsPackage1 : Package { ... }

答案 1 :(得分:0)

非常感谢你!

我花了一天的时间来试图解决这个问题。看起来如果一个程序集在VSIX包中,它肯定应该由Visual Studio找到,但是看看Fusion Log,我很困惑为什么除了标准系统位置之外它似乎从未真正扫描过。

我想要注意的是,ProvideBindingPath属性包含在VS SDK的更高版本的Microsoft.VisualStudio.Shell命名空间中。