私は現在、CSharpCodeProvider を使用して実行可能ファイルを生成するプログラムに取り組んでいます。そして、COM-Lib ("Windows Script Host Model" (wshom.ocx)) への参照を追加する必要があります。このファイルは、sysWOW64-Path にあります。ファイルをコンパイルしようとするたびに、次のエラーが表示されます。
「メタデータ ファイル 'c:\Windows\SysWOW64\wshom.ocx' を開けませんでした -- '不正な形式のプログラムを読み込もうとしました。」
問題はプラットフォームの問題ではありません。プラットフォームとして設定したものに関係なく、エラーが表示されます。/platform:x86 パラメータを設定しようとしました。「ビルダー」のプラットフォームをx86に変更してみましたが、問題は解決しませんでした。
コンパイルに使用しているコードは次のとおりです。
CSharpCodeProvider provider = new CSharpCodeProvider(d);
ICodeCompiler icc = provider.CreateCompiler();
CompilerParameters parameters = new CompilerParameters();
parameters.IncludeDebugInformation = false;
parameters.OutputAssembly = destinationDialog.FileName;
parameters.GenerateExecutable = true;
parameters.TreatWarningsAsErrors = false;
parameters.ReferencedAssemblies.Add("System.dll");
parameters.ReferencedAssemblies.Add("System.Core.dll");
parameters.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll");
parameters.ReferencedAssemblies.Add("System.Drawing.dll");
parameters.ReferencedAssemblies.Add("System.Management.dll");
parameters.ReferencedAssemblies.Add("System.Data.DataSetExtensions.dll");
parameters.ReferencedAssemblies.Add("System.XML.dll");
parameters.ReferencedAssemblies.Add("System.Xml.Linq.dll");
parameters.ReferencedAssemblies.Add(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) + @"\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\System.Speech.dll");
parameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");
parameters.ReferencedAssemblies.Add("Microsoft.CSharp.dll");
parameters.ReferencedAssemblies.Add(GetSystemDirectory() + "\\wshom.ocx");
parameters.CompilerOptions = "/unsafe /target:winexe /platform:x86";
CompilerResults results = icc.CompileAssemblyFromSource(parameters, uss);
誰かがここで私を助けてくれることを願っています...