2

我有一个独特的发展情况,并希望得到其他人的一些意见。

我有一种情况,我需要在富客户端应用程序中加载松散的 xaml 文件。给定的松散 xaml 文件可能具有对当前未加载到内存中的程序集的引用,因此在加载松散 xaml 之前加载引用的程序集。松散的 xaml 和绑定的程序集存储在不同的后端服务器上,这些后端服务器被下载到客户端并动态加载。

松散的 xaml 和/或程序集是特定于版本的,不幸的是应用程序无法在呈现 xaml 之间关闭。v1带组装。来自服务器 A 和 xaml 的v1 。v1带组装。服务器 B 上的v2。两个程序集都使用相同的命名空间声明,因此对于任何给定的松散 xaml,“旧”程序集仍然可以与“新”程序集一起使用。

问题是,如果我加载包含对 assembly.v2 中“较新”功能的引用的 xaml.v2,我不会得到对 assembly.v2 的引用。

我显然无法从应用程序域中卸载 assembly.v1,并且我不确定是否可以引用通过编组在不同应用程序域中加载的 xaml 中的项目。

除了使用不同的命名空间引用之外的任何想法?

4

3 回答 3

1

另一种选择(假设您正确地对程序集进行版本控制)是在 ns 声明中简单地包含程序集版本,如下所示:

xmlns:ns0="clr-namespace:MyCompany.MyProject.MyNameSpace; Assembly=MyCompany.MyProject, Version=1.0.0.0"
于 2009-05-16T10:57:36.400 回答
1

我猜您已经在进行动态程序集解析和加载?如果是这样,那么您可以尝试用假程序集名称代替 Xaml 中的真实程序集名称 - 然后您可以在程序集解析代码中使用它来加载并返回正确的程序集。例如,如果您的原始来源 Xaml 是:

xmlns:myassembly="clr-namespace:MyApp.MyAssembly;assembly=MyAssembly"

并且您知道 Xaml 想要 v2 的 MyAssembly,在将其解析为之前替换 Xaml 字符串中的程序集引用:

xmlns:myassembly="clr-namespace:MyApp.MyAssembly;assembly=MyAssembly.v2"

..然后在您的程序集解析/加载代码中,当您看到末尾的“.v2”位时,您会寻找并加载该程序集。

请让我知道我是否误解了这个问题,或者您目前没有进行任何自定义装配解决方案 - 我认为这肯定是这种情况下的关键。

于 2009-02-06T16:21:57.787 回答
0

我还没有确认这是否会奏效,但我相信它可能会。您可以使用 XmlnsDefinitionAttribute(在程序集级别)。例如

装配 V1 -> 装配信息.cs

[assembly: XmlnsDefinition( "http://schema.mycompany.com/myproject/v1", "MyCompany.MyProject" )]

程序集 V2 -> 程序集信息.cs

[assembly: XmlnsDefinition( "http://schema.mycompany.com/myproject/v2", "MyCompany.MyProject" )]

然后在 xaml 中:

xmlns:myassembly="http://schema.mycompany.com/myproject/v2"
于 2009-05-16T09:01:59.627 回答