私は、dll (埋め込みリソース) を exe に埋め込む手法を使用し、次のコードを使用して実行時に不明な dll を解決しています。
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
{
String resourceName = "Project.lib." + new AssemblyName(args.Name).Name + ".dll";
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
Byte[] assemblyData = new Byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
};
ただし、Spark View Engine dll (たとえば) を埋め込むと、失敗します。ただし、特定の 1 か所だけです。Spark 自体は、その場で動的にクラスを生成します。これらのクラスは、Spark (using Spark
など) を参照します。この時点で、次のエラーが発生します。
タイプ 'Spark.Class' は、参照されていないアセンブリで定義されています。アセンブリ「Spark」への参照を追加する必要があります
これは、Spark ビュー エンジンとは関係なく、動的に生成されたクラス内から埋め込まれたアセンブリを参照することに関係していると確信しています。
更新:スタックトレース
プロジェクト タスク メッセージの実行中に例外が発生しました: Spark.Compiler.BatchCompilerException: 動的ビューのコンパイルに失敗しました。c:\Users\Adam\AppData\Local\Temp\kdsjyhvu.0.cs(6,14): エラー CS0012: 型 'Spark.AbstractSparkView' は、参照されていないアセンブリで定義されています。Spark.Compiler.CSharp の Spark.Compiler.BatchCompiler.Compile(Boolean debug, String languageOrExtension, String[] sourceCode) で、アセンブリ 'Spark, Version=1.5.0.0, Culture=neutral, PublicKeyToken=7f8549eed921a12c' への参照を追加する必要があります。 .CSharpViewCompiler.CompileView(IEnumerable
1 viewTemplates, IEnumerable
1 allResources) at Spark.SparkViewEngine.CreateEntryInternal(SparkViewDescriptor descriptor, Boolean compile) at Spark.SparkViewEngine.CreateEntry(SparkViewDescriptor descriptor) at Spark.SparkViewEngine.CreateInstance(SparkViewDescriptor descriptor) at ProjectTasks.Core.Templater.Populate(String templateFilePath, Object data) ) \ProjectTasks\Core\Templater.cs:33 行目 ProjectTasks..Core.EmailTemplates.RenderImpl(String name, Object data) in \ProjectTasks\Core\EmailTemplates.cs:19 行目 ProjectTasks.Tasks.EmailUsersWithIncompleteModules.Run( ) \ProjectTasks\Tasks\EmailUsersWithIncompleteModules.cs: 41 行目 \ProjectTasks.MaintenanceTaskRunner.Run(Boolean runNow, IMaintenanceTask[] tasks) の \ProjectTasks\MaintenanceTaskRunner.cs: 25 行目 ProjectTasks.Initialiser.\ProjectTasks\Initialiser.cs:line 30 の Init(String[] args)
実際に解決策がある場合、解決策について何か考えはありますか?