Wpf 钩住在Xaml上下文中加载的程序集和类型的解析

Wpf 钩住在Xaml上下文中加载的程序集和类型的解析,wpf,xaml,assemblies,Wpf,Xaml,Assemblies,有一个很好的理由,我们在程序集前面加上前缀,每个应用程序都有一个前缀: xmlns:a="clr-namespace:Some.Name.Space;assembly=A" e、 g.如果我们有一个名为“a”的项目,它是名为“MyApplication1”的应用程序的依赖项,则最新版本将使用在构建时生成的“MA1.a”程序集 如果另一个应用程序“MyApplication2”也依赖于“a”,我们将在构建应用程序时将“a”的输出转换为“MA2.a” 到目前为止还不错 现在我们开始使用WPF,我们

有一个很好的理由,我们在程序集前面加上前缀,每个应用程序都有一个前缀:

xmlns:a="clr-namespace:Some.Name.Space;assembly=A"
e、 g.如果我们有一个名为“a”的项目,它是名为“MyApplication1”的应用程序的依赖项,则最新版本将使用在构建时生成的“MA1.a”程序集

如果另一个应用程序“MyApplication2”也依赖于“a”,我们将在构建应用程序时将“a”的输出转换为“MA2.a”

到目前为止还不错

现在我们开始使用WPF,我们需要引用Xaml中的某些类型的“A”:

xmlns:a="clr-namespace:Some.Name.Space;assembly=A"
这在设计时很好,但在运行时,除了“MA1.A”或“MA2.A”程序集之外,没有其他“A”程序集, 所以应用程序崩溃了

您是否有办法在不影响开发过程的情况下解决此问题?

例如,手动加载Xaml并设置前缀是不可接受的解决方案


提前感谢您的建议。

运行时需要知道您的程序集所依赖的程序集。这就是为什么要在代码中引用程序集,以便运行时知道在哪里可以找到类

如果决定重命名这些类,则必须将重命名操作通知CLR

我看到的唯一方法是编辑源代码或

出于一个很好的原因,我们正在为程序集添加前缀


尽管我很想相信你;我强烈建议您在编译时保持名称与运行时版本相同。调试和跟踪错误会容易得多。但是你没有提到我可能错在这里的原因。

为什么SO删除了我的第一行“Hello”?我甚至不能编辑它?现在称呼有什么不对吗?:)所以这不是一个论坛,而是一个问答网站。我们尽量保持问题和答案的整洁,有时还会在评论中添加趣味性和趣味性。“assembly”标记用于低级编程,而不是.NET程序集。@哈罗德:谢谢,我已经更新了标记。谢谢你的回答。“好的理由”是我们正在开发Excel加载项,并且这些加载项都加载在同一个应用程序域中(至少在Excel 2003中)。因此,如果“MyAddin1”和“MyAddin2”一起加载到同一个Excel实例中,并且它们都依赖于第三个“a”程序集,那么会发生一些好事;)@严重-您不能从一开始就正确命名它们,以便在XAML中引用正确的名称吗?遗憾的是,我们不能,因为前缀直到构建时才知道。因此,当我们构建“MyAddin1”时,这将触发构建“A”,并将其输出为“MA1.A”;另一方面,如果我们构建“MyAddin2”,我们将生成一个“MA2.A”程序集。这样,如果“MyAddin1”和“MyAddin2”加载在同一应用程序域中,则不会发生冲突。解决方案是在构建时使用带有正确前缀的临时Xaml文件转换Xaml,如您所说;但现在的问题是如何在不破坏构建过程的情况下使用VS干净地执行此操作。@严重-只要只需要修改XAML文件,就可以创建/生成XSLT来转换解决方案中的所有XAML文件。感谢您的建议,但这看起来很难实现,因为考虑到当前前缀,应在每次生成时触发生成/转换。所以我想它可能需要一个定制的MSBuild任务,这是不值得的!