Question

C'est un extension lointain mais je vais essayer d'expliquer le problème le plus possible. J'utilise le compilateur CodeDom in .NET 3.5 pour compiler 3 fichiers CS ... 2 sur lesquels ont été générés à partir d'Edmgen.exe et 1 est un fichier généré dynamiquement. Le code de la compilation ressemble à ceci

CompilerResults results = compiler.CompileAssemblyFromFileBatch(parameters, new string[]{string.Format("{0}\\Dynamic.cs", Directory.GetCurrentDirectory()),
                string.Format("{0}\\{1}.ObjectLayer.cs", Directory.GetCurrentDirectory(), ModelName), string.Format("{0}\\{1}.Views.cs", Directory.GetCurrentDirectory(), ModelName)});

Lorsque tous les trois fichiers sont compilés ensemble, je reçois cette erreur

Jeton non valide 'NOID' dans la déclaration des membres de la classe, de la structure ou de l'interface

Je supposerais que cette erreur se réfère à la section de code situé dans l'objetLayer.cs

Vide partiel Onidchanged ();

Toutefois, si ces 3 fichiers sont inclus dans un nouveau projet VS2010 et compilé à travers ce compilateur, ils fonctionnent bien ... Cette erreur ne se produit qu'avec le compilateur CodeDom ... il a un problème avec "vide partiel" .

J'ai trouvé un problème très similaire à celui-ci ici http:// social .msdn.microsoft.com / Forums / FR-US / LINQPROJECTNérrable / Fil / 85E085C8-B6AC-4CAE-B59D-7B9CE7758122 /

Cependant, ce correctif ne fonctionne pas parce que j'utilise le compilateur CodeDom Pas VS Compiler ....

J'aimerais également noter que j'ai essayé le compilateur de commandes 3.5 3.5 (CSC.EXE) et cela a également fonctionné bien. Et j'ai également testé ce code exact sous .NET 4 qui fonctionne également. Ce numéro semble seulement venir sous .NET 3.5

Quelqu'un est jamais rencontré dans ceci ou avoir une idée de la raison pour laquelle le compilateur CodeDom .NET 3.5 aurait un problème avec des vides partiels?

Était-ce utile?

La solution

problème résolu!

Ceci est toujours très étrange à mon avis mais sous .NET 3.5 Le compilateur CodeDom Par défaut souhaite utiliser le compilateur .NET 2 CSC.EXE .... Cela faisait des conflits avec mes fichiers CS.

Vous devez spécifier la version du compilateur

var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });

celui-ci a résolu toutes mes problèmes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top