2011-06-15 13 views
2

Est-ce que quelqu'un sait s'il est possible de "déployer Bin" le CTP Async?Async CTP sur l'environnement de confiance partielle

Puisqu'une grande partie d'Async est fondamentalement une astuce de compilateur, j'ai pensé que la précompilation de mon application et son déploiement sur un serveur sans Async CTP installé pourraient fonctionner. Malheureusement, cela ne semble pas si simple. Je reçois le message d'erreur suivant lorsque je tente d'appeler une méthode async:

Task<Result> task = _checker.CheckAsync(input); 

Le type initialiseur pour « System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1 » a lancé une exception.

Ce n'est pas vraiment le type d'erreur auquel je m'attendrais, mais peut-être y a-t-il des assemblages de remplacement que je pourrais déployer dans mon répertoire Bin pour résoudre ce problème? Je ne peux pas installer le CTP Async sur cette machine (de production).

Mise à jour: J'ai inclus les détails de InnerException ainsi:

System.MethodAccessException: Tentative par la méthode transparente de sécurité 'System.Runtime.CompilerServices.AsyncTaskMethodBuilder 1<TResult>..cctor()' to access security critical method 'System.Threading.Tasks.TaskScheduler.add_UnobservedTaskException(System.EventHandler 1)' échoué . à System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1..cctor()

Cela semble être une question de confiance moyen, et non pas tant un problème de async?

+0

Voulez-vous commenter pourquoi la question a été déclassée? – Thorarin

Répondre

2

Vous devrez également déployer AsyncCtpLibrary.dll. Je voudrais attendre que tout ce qui est nécessaire ... avez-vous déjà déployé cela aux côtés de votre application? Quelle est l'exception interne de TypeInitializerException?

EDIT: Comme vous le dites, cela ressemble à un problème de confiance moyenne, qui ne serait pas résolu par l'installation complète de toute façon. Cela vaut probablement la peine d'en parler directement avec l'équipe (je peux le faire si vous le souhaitez) au cas où votre situation présente quelque chose d'inhabituel en termes de sécurité.

Pour vérifier que cela est le cas, vous pouvez essayer d'ajouter un gestionnaire pour vous UnobservedTaskException quelque part dans votre code:

TaskScheduler.UnobservedTaskException += (sender, e) => e.SetObserved(); 

faire dans un petit projet qui n'utilise pas du tout async - Je soupçonne ça va échouer de la même manière. Si vous pouvez modifier vos paramètres de sécurité de telle sorte que cela fonctionne, le reste peut fonctionner à partir de ce moment.

+0

AsyncCtpLibrary.dll a été déployé automatiquement. J'ai ajouté les détails de InnerException, mais il semble être un problème de confiance moyenne :( – Thorarin

+0

@Thorarin: Oui, je le crois.Voir mon edit –

+0

J'ai implémenté votre vérification et j'ai essayé d'envelopper dans un [SecuritySafeCritical] ' méthode comme certains articles ont suggéré.Les choses continuent d'échouer, donc je vous ai envoyé un e-mail pour entrer en contact avec l'équipe – Thorarin

Questions connexes