2008-11-21 55 views
1

在XAML名稱空間聲明中,是否有一種方法根據當前配置消除不​​同名稱的程序集歧義?XAML中的調試和發佈程序集參考

我正在修改項目構建系統的過程。舊的系統已經調試組件和釋放組件建設單獨的目錄,這意味着以下(大致)將很好地工作在XAML文件的頂部:

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

我們收到了重構一個請求是區分我們調試和發佈配置的命名方式不同。所以我們的SampleAssembly.dll,它以前建在兩個獨立的目錄中,現在是兩個程序集在同一個目錄SampleAssemblyDebug.dll和SampleAssemblyRelease.dll。有沒有辦法根據配置調整XAML線以引用正確的程序集?

回答

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命名空間的類型。

0

XmlnsDefinitionAttribute設置非常好。我試圖在XAML中加載的程序集來自CLI項目。爲了使XmlnsDefinition正常工作,我必須在CLI項目中添加一個對WindowsBase(帶有System.Windows.Markup命名空間的程序集)的引用。

一旦我有了它,它就像一個魅力。好的提示。