2012-06-29 76 views
1

在以類型在同一個組件中的.xaml活動引用使用命名空間「的xmlns:當地」沒有裝配基準這樣的:我可以在xaml中強制使用xmlns:local中的程序集名稱嗎?

xmlns:local="clr-namespace:Foo.Bar" 

由於沒有組裝我的單元測試,其加載XAML失敗,我代碼,第三個程序集(Azure工作者角色)無法加載它,因爲它不知道名稱空間屬於哪個程序集。

反正我有可以強制的xmlns引用這樣的組件(和在XAML文件的所有其他的xmlns):

xmlns:local="clr-namespace:Foo.Bar;assembly=Foo" 

如果我添加了;assembly=Foo手動將其作品,但Visual Studio中保持刪除組裝字符串時,我改變了一些東西。

+0

所以,你加載活動從文本的單元測試?你可能不得不分開,以便你的單元測試可以處理已經加載的程序集。 – Will

回答

0

不,你不能強制LocalAssembly。

你可以引用程序集並以這種方式使用活動。或者,如果您正在加載.xaml文件,則可以使用XamlXmlReader指定LocalAssembly。

我添加了一個類的Microsoft.Activities.Extensions最新版本,稱爲XamlHelper,這是否對你,但這裏是如何工作的

/// <summary> 
    /// Loads a XAML or XAMLX file 
    /// </summary> 
    /// <param name="xamlFile"> 
    /// The xaml file. 
    /// </param> 
    /// <param name="localAssembly"> 
    /// The local assembly. 
    /// </param> 
    /// <returns> 
    /// The activity or root activity of a WorkflowService 
    /// </returns> 
    public static Activity Load(string xamlFile, Assembly localAssembly) 
    { 
     Contract.Requires(localAssembly != null); 
     if (localAssembly == null) 
     { 
      throw new ArgumentNullException("localAssembly"); 
     } 

     var readerSettings = new XamlXmlReaderSettings 
      { 
       LocalAssembly = localAssembly, 
       AllowProtectedMembersOnRoot = true 
      }; 

     var xamlType = GetXamlType(xamlFile); 
     switch (xamlType) 
     { 
      case WorkflowXamlFileType.Activity: 
       using (var reader = new XamlXmlReader(xamlFile, readerSettings)) 
       { 
        return ActivityXamlServices.Load(reader); 
       } 

      case WorkflowXamlFileType.WorkflowService: 
       using (var reader = new XamlXmlReader(xamlFile, readerSettings)) 
       { 
        return ((WorkflowService)XamlServices.Load(reader)).GetWorkflowRoot(); 
       } 

      default: 
       throw new ArgumentException("Invalid file extension on xamlFile"); 
     } 
    } 
相關問題