j'ai asked for help sur le forum AAPC, mais je n'ai pas été en mesure de résoudre ce encore. J'ai créé un test VS2015 solution qui démontre les problèmes que je rencontre. J'utilise CSLA 4.6.603 dans Outlook, Word, Excel et PowerPoint. Après avoir défini Csla.ApplicationContext.User
, un SerializationException
peut être lancé lors de l'affichage d'un Form
ou MessageBox
, ou même de la lecture de code XML.C# SerializationException dans Office 2013/2016 VSTO add-ins avec AAPC
L'exemple le plus simple du problème est le suivant:
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);
}
}
Dans la solution d'essai, il est un autre exemple qui jette le même SerializationException
en essayant de lire XML via dataSet.ReadXml(tempFileName, XmlReadMode.InferSchema);
Je traitais la AppDomain.CurrentDomain.AssemblyResolve
événement, et CSLA est répertorié dans AppDomain.CurrentDomain.GetAssemblies()
juste avant que l'exception soit levée.
La solution de test a une identité personnalisée très basique, un objet métier de base qui lit à partir d'un fichier XML généré, et une forme avec trois boutons.
Si vous définissez le projet WindowsUI que le projet StartUp et l'exécuter, chaque bouton sous la forme principale doit réussir, sans exception jetés.
Définissez le projet WordAddIn comme projet StartUp et exécutez-le. Word démarre et le même formulaire est affiché en tant que les charges de complément. Le premier bouton réussit, mais les deux boutons suivants lèvent des exceptions. Consultez la sortie de débogage pour plus de détails ou définissez un point d'arrêt. La même chose est vraie pour le projet OutlookAddIn.
Comme d'autres l'ont souligné plus tôt dans la discussion sur le forum AAPC, cela est causé par ou lié à .NET ne pas résoudre les assemblées. L'événement AssemblyResolve
peut être la réponse, je n'ai juste pas été en mesure de le comprendre.
Toute aide serait grandement appréciée.