【问题标题】:Debug and Release Assembly Refrences in XAMLXAML 中的调试和发布程序集引用
【发布时间】:2010-09-23 11:27:36
【问题描述】:

在 XAML 命名空间声明中,有没有办法根据您当前的配置来消除不同命名的程序集的歧义?

我正在重新设计项目构建系统。旧系统将调试和发布程序集构建为单独的目录,这意味着以下(大致)可以在 XAML 文档的顶部正常工作:

<Window x:Class="test.MainWindow"
...
    xmlns:tns="clr-namespace:TestNameSpace;assembly=SampleAssembly"
...

我们收到的重组请求是通过对调试和发布配置进行不同的命名来区分我们的程序集。所以我们的SampleAssembly.dll,之前建在两个单独的目录下,现在是同一个目录下的两个程序集,SampleAssemblyDebug.dll和SampleAssemblyRelease.dll。有没有办法根据配置调整 XAML 行以引用正确的程序集?

【问题讨论】:

    标签: .net wpf visual-studio


    【解决方案1】:

    目前这是不可能的,没有一些讨厌的预编译技巧。但是,您可以做的是定义一个程序集级别属性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 命名空间中的一个类型。

    【讨论】:

    • XmlnsDefinitionAttribute 设置效果很好。我试图在 XAML 中加载的程序集来自 CLI 项目。为了让 XmlnsDefinition 正常工作,我必须在我的 CLI 项目中添加对 WindowsBase(其中包含 System.Windows.Markup 命名空间的程序集)的引用。一旦我把它建成,它就像一个魅力。很好的提示。
    猜你喜欢
    • 2012-02-24
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多