.Net 3.5 CodeDom Compiler, генерирующий странные ошибки - PullRequest
0 голосов
/ 22 июля 2010

Это далеко, но я постараюсь объяснить проблему как можно лучше.Я использую компилятор CodeDom в .Net 3.5 для компиляции 3-х файлов cs ... 2 из которых были сгенерированы из Edmgen.exe, а 1 - динамически сгенерированный файл.Код компиляции выглядит следующим образом

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

Когда все эти три файла компилируются вместе, я получаю эту ошибку

Недопустимый токен 'void' в объявлении члена класса, структуры или интерфейса

Я бы предположил, что эта ошибка относится к этой строке кода, расположенной в ObjectLayer.cs

частичный void OnIDChanged ();

ОДНАКО, если эти 3 файлавключены в новый проект VS2010 и скомпилированы с помощью этого компилятора, они работают нормально .... эта ошибка возникает только с компилятором CodeDom ... у него есть некоторые проблемы с "частичной пустотой".

Я нашелпроблема, очень похожая на эту, здесь http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/85e085c8-b6ac-4cae-b59d-7b9ce7758122/

Однако это исправление не работает, потому что я использую компилятор CodeDom, а не VS-компилятор ....

Я также хотел бы отметить, что япопробовал компилятор командной строки .Net 3.5 (csc.exe), и это также работало нормально.И я также проверил этот точный код в .Net 4, который также работает.Эта проблема возникает только в .net 3.5

Кто-нибудь когда-либо сталкивался с этим или есть идея, почему компилятор .Net 3.5 CodeDom будет иметь проблемы с частичными пустотами?

1 Ответ

1 голос
/ 23 июля 2010

Проблема решена!

Это все еще очень странно, на мой взгляд, но в .Net 3.5 компилятор CodeDom от DEFAULT хочет использовать компилятор .Net 2 csc.exe .... это вызывало конфликты смои файлы cs.

ВЫ ДОЛЖНЫ УКАЗАТЬ ВЕРСИЮ КОМПИЛЕРА

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

Эта подкладка решила все мои проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...