Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 加载具有不同版本的相同程序集并安装多个.xaml实例_C#_.net_Version_Instance_.net Assembly - Fatal编程技术网

C# 加载具有不同版本的相同程序集并安装多个.xaml实例

C# 加载具有不同版本的相同程序集并安装多个.xaml实例,c#,.net,version,instance,.net-assembly,C#,.net,Version,Instance,.net Assembly,这是我问题的后续行动 我想在不同版本中加载相同的程序集,并从这些程序集创建多个类型实例 以下是我所拥有的: 我有一个程序集asm.dll,其版本(在AssemblyInfo.cs中)设置为1.0.0.0 然后,我修改了一些代码,将版本增加到2.0.0.0,并将其重新构建为asm.dll 现在,我有dir1/asm.dll和dir2/asm.dll 以下是我的工作: assembly = Assembly.LoadFile(assemblyFile); var types = assembly.

这是我问题的后续行动

我想在不同版本中加载相同的程序集,并从这些程序集创建多个类型实例

以下是我所拥有的:

我有一个程序集asm.dll,其版本(在AssemblyInfo.cs中)设置为1.0.0.0

然后,我修改了一些代码,将版本增加到2.0.0.0,并将其重新构建为asm.dll

现在,我有dir1/asm.dll和dir2/asm.dll

以下是我的工作:

assembly = Assembly.LoadFile(assemblyFile);

var types = assembly.GetTypes();

Type type = types.First<Type>(t => t.Name.Equals(backboneMemberClass + "Editor"));

MyObject myObject = (MyObject)assembly.CreateInstance("theClassIWantToInstantiate", false, BindingFlags.CreateInstance, null, new object[] { }, null, null);

我正在加载的类是.xaml WPF UserControl,异常的Stacktrace显示.xaml.cs文件中的InitializeComponent()正在引发异常,因为它找不到.baml文件。

经过一周的痛苦和努力,我终于找到了问题的原因和解决方案

该问题存在于自动生成的
*.g.i.cs
文件中,该文件由
用户控件的
InitializeComponent()
方法调用,如下所示:

此文件生成一个字符串(资源定位器),表示指向该xaml组件的路径,如下所示:

现在,如果同一程序集有多个版本,并且两个版本都包含相同的xaml文件,那么WPF不知道要实例化哪个xaml文件,因为资源定位器只引用程序集的名称,而不引用其版本

这会导致出现
TargetInvocationException
,表示

{“组件'MyNamespace.MyUserControl'没有URI'/MyAssembly;CoComponent/MyUserControl.xaml''标识的资源”

详情如下:

对于这一点,最简单(但最明显的是不明显)的解决方案是将程序集的版本添加到此资源定位器。这可以通过添加

此课程的学分归:


为了不必手动管理AssemblyVersion,您可以使用以下各项:$(ProjectDir)Properties\AssemblyInfo.cs$([System.IO.File]::ReadAllText($(AssemblyInfoFile)))$([System.Text.RegularExpressions.Regex]::Match($(AssemblyInfoContent),'AssemblyVersion(Attribute);(.+))$([System.Text.RegularExpressions.Regex]::匹配($(AssemblyVersionATR),“[0-9\.]+”)
A first chance exception of type 'System.Exception' occurred in PresentationFramework.dll
A first chance exception of type 'System.Reflection.TargetInvocationException' occurred in mscorlib.dll