我在CSLA論壇上第一個asked for help,但我還沒有能夠解決這個問題。我創建了一個test VS2015 solution,它演示了我遇到的問題。Office 2013/2016中的C#SerializationException CSLA的VSTO加載項
我在Outlook,Word,Excel和PowerPoint中使用CSLA 4.6.603。在設置Csla.ApplicationContext.User
之後,當顯示Form
或MessageBox
或甚至讀取XML時,可以拋出SerializationException
。
問題的最簡單的例子是:
private void MessageThrows(object sender, EventArgs e)
{
// This message displays correctly
MessageBox.Show("About to set user to UnauthenticatedPrincipal. " +
"Check Debug Output to see exception.",
"Before UnauthenticatedPrincipal");
// The user is set correctly with no exception
Csla.ApplicationContext.User = new Csla.Security.UnauthenticatedPrincipal();
try
{
// The following message throws:
// System.Runtime.Serialization.SerializationException:
// Type is not resolved for member 'Csla.Security.UnauthenticatedPrincipal,Csla,
// Version =4.6.603.0,
// Culture =neutral,
// PublicKeyToken =93be5fdc093e4c30'.
MessageBox.Show("The user has been set to UnauthenticatedPrincipal.",
"After UnauthenticatedPrincipal");
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
}
在測試解決方案有試圖通過dataSet.ReadXml(tempFileName, XmlReadMode.InferSchema);
我處理AppDomain.CurrentDomain.AssemblyResolve
讀取XML時拋出相同SerializationException
另一個例子事件和CSLA在AppDomain.CurrentDomain.GetAssemblies()
中列出,就在引發異常之前。
測試解決方案有一個非常基本的自定義標識,一個從生成的XML文件讀取的基本業務對象和一個帶有三個按鈕的表單。
如果將WindowsUI項目設置爲StartUp項目並運行它,則主窗體中的每個按鈕都應成功,並且不會引發任何異常。
將WordAddIn項目設置爲啓動項目並運行它。 Word啓動並顯示與加載項加載相同的表單。第一個按鈕成功,但接下來的兩個按鈕會引發異常。有關詳細信息,請參閱調試輸出或設置斷點。 OutlookAddIn項目也是如此。正如其他人早些時候在CSLA論壇主題中指出的那樣,這是由於.NET無法解析程序集而導致的或與之相關的。 AssemblyResolve
事件可能是答案,我只是無法弄清楚。
任何幫助將不勝感激。