1

.xaml アクティビティでは、同じアセンブリ内の型への参照は、次のようにアセンブリ参照なしで名前空間 'xmlns:local' を使用します。

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

アセンブリがないため、xaml を読み込む単体テストが失敗し、3 番目のアセンブリ (Azure Worker ロール) のコードも、名前空間が属するアセンブリがわからないため、それを読み込むことができません。

とにかく、xmlns がこのようなアセンブリ (および xaml ファイル内の他のすべての xmlns) を参照するように強制することはできますか?

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

手動で追加する;assembly=Fooと機能しますが、何かを変更するとVisual Studioはアセンブリ文字列を削除し続けます。

4

1 に答える 1

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");
        }
    }
于 2012-06-29T23:10:55.937 に答える