0

これはかなりの範囲ですが、可能な限り問題を説明しようと思います。.Net 3.5のCodeDomコンパイラを使用して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)});

これらの3つのファイルすべてを一緒にコンパイルすると、このエラーが発生します

クラス、構造体、またはインターフェイスメンバー宣言のトークン'void'が無効です

このエラーは、ObjectLayer.csにあるこのコード行を参照していると思います。

部分的なvoidOnIDChanged();

ただし、これら3つのファイルが新しいVS2010プロジェクトに含まれ、そのコンパイラでコンパイルされた場合、正常に動作します。このエラーは、CodeDomコンパイラでのみ発生します...「部分的な無効」に問題があります。

私はここでこれに非常に類似した問題を見つけました http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/85e085c8-b6ac-4cae-b59d-7b9ce7758122/

ただし、VSコンパイラではなくCodeDomコンパイラを使用しているため、この修正は機能しません。

また、.Net 3.5コマンドラインコンパイラ(csc.exe)を試しましたが、これも正常に機能しました。また、この正確なコードを.Net4でテストしました。これも機能します。この問題は、.net3.5でのみ発生するようです。

誰かがこれに遭遇したり、.Net 3.5 CodeDomコンパイラが部分的なボイドの問題を抱えている理由を知っていますか?

4

1 に答える 1

1

問題が解決しました!

これは私の意見ではまだ非常に奇妙ですが、.Net 3.5では、DEFAULTによるCodeDomコンパイラは.Net 2 csc.exeコンパイラを使用したいと考えています。これにより、csファイルとの競合が発生していました。

コンパイラバージョンを指定する必要があります

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

その一列が私のすべての問題を解決しました。

于 2010-07-22T21:41:00.583 に答える