2012-11-02 34 views
1

以下是在嘗試排除自我託管設計器中相同問題時發現的情況。創建一個類型在其中的庫項目。我的是這個。這是一個錯誤還是我錯過了WF設計器的一些東西

namespace RaceEventLibrary 
{ 
    public class Registration 
    { 
     public string Name { get; set; } 
     public int Age { get; set; } 
     public string EventName { get; set; } 
    } 
} 

現在創建一個Workflow 4.5控制檯應用程序(或服務,它似乎並不重要)。參考圖書館項目。在設計器上添加一個序列,然後創建這個庫類型的InArgument,在我的情況下注冊。一切都很好,設計師很高興。

接下來創建另一個相同的項目,引用同一個庫。現在只需從第一個項目中打開xaml文件即可。繁榮,它找不到類型。

System.Xaml.XamlException:'屬性'registration'的類型'InArgument(r:Registration)'無法解析。'

這在XAML是:

<x:Members> 
     <x:Property Name="registration" Type="InArgument(r:Registration)" /> 
    </x:Members> 

preceded by 
    xmlns:r="clr-namespace:RaceEventLibrary;assembly=RaceEventLibrary" 

隨着自託管設計師,我一直在尋找這個問題的許多變化和嘗試了各種方法來獲得加載到設計庫組件,但沒有喜悅。

有關如何解決此問題的任何建議?

+0

您需要使用[Fusion log viewer。](http://msdn.microsoft.com/en-us/library/e74a18c4.aspx)進行調試。只要確保以管理員身份運行它,打開日誌,並在嘗試調試之前重新啓動。您將看到CLR正在查找程序集的位置以及哪個版本,並從那裏確定它未找到的原因(如果您已安裝它)。 – Will

+0

很奇怪。做了你的建議並看到很多日誌。但沒有這個問題。自寫之後,我把這個違規的工作流帶入瞭解決方案,並且可以用這種方式在設計器中打開它,因爲obj文件夾下的所有文件都在那裏,所以並不奇怪。繼續,但謝謝你的建議。 –

+0

等一下,你只是打開一個不在解決方案中的文件?這不被支持,AFAIK。 – Will

回答

0

WF4有它自己的加載程序集的方法,它並不總是與標準.NET框架完全相同。 Ron Jacobs做了一些有趣的帖子,參見here

您沒有提到您如何實際將工作流加載到WorkflowDesigner中。有幾種方法可以做到這一點。使用ActivityXamlServices.CreateBuilderReader()時,您可以使用XamlSchemaContext指定需要的組件。這應該讓你加載工作流程。

+0

我剛剛使用WorkflowDesigner.Load(workflowFileName)。使用加載工作流的建議,像下面這樣引用程序集:'var reader = new XamlXmlReader(System.IO.File.OpenText(_workflowName));裝配組件= Assembly.LoadFrom(@「somepath \ RaceEventLibrary。DLL「); 的IList 組件=新列表() { 組件 }; 變種WF = ActivityXamlServices.CreateBuilderReader(讀取器,新XamlSchemaContext(組件)); WorkflowDesigner.Load(WF);' –

+0

遺憾格式化,唯一的問題是設計師似乎在加載時失去了保真度,或者在某些情況下我得到一個空白的窗口,佈局信息(我認爲的點)似乎已經丟失。 –

相關問題