Pergunta

Este é um exagero, mas vou tentar explicar o problema da melhor maneira possível.Estou usando o CodeDom Compiler em .Net 3.5 para compilar 3 arquivos cs... 2 dos quais foram gerados a partir de Edmgen.exe e 1 é um arquivo gerado dinamicamente.O código de compilação fica assim

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)});

Quando todos esses três arquivos são compilados juntos, estou recebendo este erro

Token 'void' inválido na declaração de classe, estrutura ou membro de interface

Eu diria que este erro está se referindo a esta linha de código localizada em ObjectLayer.cs

void parcial OnIDChanged();

NO ENTANTO, se esses 3 arquivos forem incluídos em um novo projeto VS2010 e compilados através desse compilador, eles funcionarão bem....este erro está ocorrendo apenas com o compilador CodeDom...está tendo algum problema com "void parcial".

Encontrei um problema muito semelhante a este aquihttp://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/85e085c8-b6ac-4cae-b59d-7b9ce7758122/

No entanto, essa correção não funciona porque estou usando o compilador CodeDom e não o compilador VS ....

Também gostaria de observar que tentei o compilador de linha de comando .Net 3.5 (csc.exe) e também funcionou bem.E também testei esse código exato em .Net 4, que TAMBÉM funciona.Este problema parece surgir apenas no .net 3.5

Alguém já se deparou com isso ou tem uma ideia de por que o compilador .Net 3.5 CodeDom estaria tendo problemas com vazios parciais?

Foi útil?

Solução

Problema resolvido!

Isso ainda é muito estranho na minha opinião, mas no .Net 3.5 o compilador CodeDom por DEFAULT deseja usar o compilador .Net 2 csc.exe... isso estava causando conflitos com meus arquivos cs.

VOCÊ DEVE ESPECIFICAR A VERSÃO DO COMPILADOR

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

Aquele alinhado resolveu todos os meus problemas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top