2

実行時にアセンブリ (*.dll) を生成しています。次の投稿で推奨されているように、コンパイル プロセスは CodeDom を使用して実行されます。

実行時に動的に DLL アセンブリを生成する

私のコードとアセンブリは、エラーではなく正常に生成されました。問題は、次を使用してリフレクションを介して実行時にこの生成されたアセンブリをロードしようとしたときに発生します。

 // load for reflection only
 var _assemblyTempLoad = Assembly.LoadFrom(assembly.FullName);

次の例外がスローされます。

「ファイルまたはアセンブリ 'nameforassembly.dll' またはその依存関係の 1 つを読み込めませんでした。モジュールにはアセンブリ マニフェストが含まれている必要があります。」

マニフェスト ファイルを生成する方法、またはこの問題を修正する方法は?

次のコードを使用して、実行時にアセンブリが生成されることを明確にしたいと思います。

CompilerResults compilerResult = codeDomProvider.CompileAssemblyFromFile(compilerParameters, Path.Combine(path, sourceCodeFile));`

前もって感謝します

4

2 に答える 2

0

次のことを試しましたか

compilerParameters.CompilerOptions = string.Format("/win32manifest: {0}", manifestFilename);

すでにCompilerOptions何らかの値に設定している場合は、文字列を連結するだけです

compilerParameters.CompilerOptions += string.Format(" /win32manifest: {0}", manifestFilename);

win32manifest パラメーターは、マニフェスト ファイルも生成するようにコンパイラに指示します。

于 2012-07-14T16:59:44.313 に答える
0

アセンブリが実行時に (その場で) 作成されるとき、アセンブリ情報またはメタデータはアセンブリに自動的に配置されません。[Assembly] 属性の使用も必要でした。このようにして、プロセスの最後のステップは、/platform 引数をコンパイラに配置することでした (sgmoore に感謝します)。これは Redgate リフレクターを使用して確認できます。アセンブリは、バージョン管理とメタデータ属性なしで表示されました。このような:

streamWriter.WriteLine(string.Format("[assembly: AssemblyTitle(\"{0}\")]", yourassembly.propertyfornamespace.Replace(" ", "")));
streamWriter.WriteLine(string.Format("[assembly: AssemblyDescription(\"{0}\")]", yourassembly.propertywithdescription));
于 2012-07-17T21:13:17.463 に答える