在XAML名称空间声明中,有没有办法根据您当前的配置消除不同命名的程序集的歧义?
我正在重新设计项目构建系统。旧系统将调试和发布程序集构建为单独的目录,这意味着以下(大致)可以在XAML文档的顶部正常工作:
<Window x:Class="test.MainWindow"
...
xmlns:tns="clr-namespace:TestNameSpace;assembly=SampleAssembly"
...
我们收到的重组请求是通过为调试和发布配置命名不同来区分我们的程序集。因此,我们的SampleAssembly.dll以前构建在两个单独的目录中,现在是同一目录中的两个程序集,SampleAssemblyDebug.dll和SampleAssemblyRelease.dll。有没有办法根据配置调整该XAML线以引用正确的组件?
答案 0 :(得分:2)
目前这是不可能的,没有一些讨厌的预编译技巧。但是,您可以做的是定义装配级别属性XmlnsDefinitionAttribute 在您的程序集上,然后使用您在XAML中定义的uri命名空间。
例如,在AssemblyInfo.cs文件中,您可以使用以下内容:
[assembly: XmlnsDefinition("http://mytest.com", "TestNameSpace")]
然后在XAML中:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:test="http://mytest.com">
<Grid>
<test:MyButton></test:MyButton>
</Grid>
</Window>
MyButton是TestNameSpace命名空间中的一种类型。
答案 1 :(得分:0)
XmlnsDefinitionAttribute设置非常好。我试图在XAML中加载的程序集来自CLI项目。为了使XmlnsDefinition正常工作,我必须在CLI项目中添加对WindowsBase(带有System.Windows.Markup命名空间的程序集)的引用。
一旦我建造它,它就像一个魅力。好的提示。