在加载插件并尝试创建"XYZ"控件时,应用程序将引发以下异常:
"组件'XYZ'没有在UserControls构造函数的InitializeComponent()方法上由URI'/ThePluginAssembly ;component/XYZ.xaml'"标识的资源.
关键点是:
用户控件位于插件程序集中
我试图从插件程序集内部创建usercontrol
插件与主应用程序位于同一目录中
用户控件仅在通过XAML创建时才会出现问题.我在同一个程序集中有几个其他用户控件,但我使用代码实例化这些用户控件.当我尝试在XAML中创建UserControl时,我只收到错误消息.
在做一些谷歌时,我意识到当我的插件的两个实例加载到应用程序中时会发生这种情况.当我从其中一个文件夹中删除我的插件时(我允许从两个位置加载此插件),此异常停止重复发生.
我的问题:
1)WPF尝试解析URI加载我的控件背后的原因是什么?
2)我是否有办法在应用程序中加载我的插件的两个实例,并以某种方式摆脱这个异常?或者某种方式为每个实例创建一个唯一的URI(如果此异常是由冲突的URI引起的).
任何评论或参考都会有所帮助.
谢谢你的关注.
编辑:与Phil发布的问题相同:如何强制WPF使用使用程序集强名称的资源URI?哎呀!
Hii,还有很多其他人已经发布过这么多关于此问题的问题.但这里的情况有所不同.
我需要提取前三个数字即.$(major).$(Minor).$(Build)从版本号.我怎么能这样做??我试过AssemblyInfoTask..but那个任务只是为了覆盖版本号.不提取版本号.
我需要提取前三个数字并将它们分配给某个属性.以供进一步使用.
好吧,我可以使用FileUpdatetask.like 覆盖它们::
<FileUpdate
Files="@(AssemblyFile)"
Regex='(\d+)\.(\d+)\.(\d+)\.(\d+)'
ReplacementText='$1.$2.$3.$(Revision)'>
</FileUpdate>
Run Code Online (Sandbox Code Playgroud)
现在我怎么能用他们的价值呢.$1,$2,$3分配给属性.???
感谢名单.
{"无法加载文件或程序集'AssemblyName,PublicKeyToken = null'或其依赖项之一.找到的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)":"AssemblyName,PublicKeyToken = null"}
我正在InnerException.Message尝试在签署正在使用的未签名第三方程序集之后调试我的应用程序时收到有问题的消息.奇怪的是,我已经签署了消息中显示的程序集,即无法加载的程序集.
这可能是什么问题?我该如何解决这个问题?
编辑
编辑以提供有关我所做的更多信息:
抛出异常的程序集,顺便说一下,项目构建正常,这是我正在构建的程序集的运行时异常InitializeComponent(),是一个带有WPF控件的开源组件(MahApps.Metro).我发现了一个类似的问题,但没有一个答案解决了这个问题.
我有一个遵循MVVM模式的WPF应用程序.我们最近签署了应用程序,现在我在启动时获得了很多第一次机会异常.我已将问题追溯到以下问题:
在任何视图中,如果我在初始化视图时在应用程序中引用另一个命名空间,我会收到错误:
"Could not load file or assembly 'MyApplication, Version=3.0.5917.24348, Culture=neutral, PublicKeyToken=xxxxxxxxxxxx' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)":"MyApplication, Version=3.0.5917.24348, Culture=neutral, PublicKeyToken=xxxxxxxxxxx"
Run Code Online (Sandbox Code Playgroud)
它总是在寻找一个比我实际运行的版本落后1的版本.
如果我从视图中删除对其他命名空间的引用,InitializeComponent()则不会抛出错误
视图:
<UserControl x:Class="MyApplication.View.DiagnosticsView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:convert="clr-namespace:MyApplication.Converters" <!--Causes error-->
xmlns:behave="clr-namespace:MyApplication.Behaviors" <!--Causes error-->
xmlns:controls="clr-namespace:MyApplication.UserControls" <!--Causes error-->
Run Code Online (Sandbox Code Playgroud)
如果我删除这些引用,并将我的转换器和行为移动到另一个DLL,然后通过DLL引用它们没有问题.错误消失了.此外,如果我没有签署该应用程序,我不会得到错误.我真的不想在不同的DLL中引用这些东西,看起来这应该可以正常工作.当所有视图都被创建时,它也会花费大约30秒来抛出所有这些错误,所以我的性能受到了冲击.我不知道为什么应用程序试图加载自己,以及为什么它试图加载自己的旧版本.无论我构建多少次,错误始终是1版本.
Fusion日志:
*** Assembly Binder Log Entry (3/17/2016 @ 10:30:11 AM) ***
The operation failed.
Bind result: hr = 0x80131040. No description available.
Assembly manager …Run Code Online (Sandbox Code Playgroud) c# ×2
wpf ×2
.net ×1
disassembly ×1
il ×1
installer ×1
manifest ×1
msbuild ×1
mvvm ×1
strongname ×1