我一直在使用将 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(例如)时,它会倒下。但仅限于一个特定的地方。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.BatchCompiler.Compile(Boolean debug, String languageOrExtension, String[] sourceCode) at Spark.Compiler.CSharp 添加对程序集“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) 在 \ProjectTasks\Core\EmailTemplates.cs: 第 19 行在 ProjectTasks.Tasks.EmailUsersWithIncompleteModules.Run( ) 在 \ProjectTasks\Tasks\EmailUsersWithIncompleteModules.cs: 第 41 行在 ProjectTasks.MaintenanceTaskRunner.Run(Boolean runNow, IMaintenanceTask[] tasks) 在 \ProjectTasks\MaintenanceTaskRunner.cs: 在 ProjectTasks.Initialiser 的第 25 行。\ProjectTasks\Initialiser.cs 中的初始化(字符串 [] 参数):第 30 行
如果确实有一个决议,任何人都对决议有任何想法吗?