我正在使用MSBuild任务中的Mono.Cecil,我遇到了解决程序集问题的方法。它正在拿起.NET版本的Prism而不是Silverlight版本。 Prism的.NET版本不包含Microsoft.Practices.Prism.Regions.Behaviors.TabControlRegionSyncBehavior
,因此我们无法解析该类型。
我正在中间输出上执行任务,因此引用的程序集不在该文件夹中。程序集的搜索路径在MSBuild脚本中设置为ReferencePath。
Mono.Cecil在此函数中进行基于名称的匹配:
AssemblyDefinition SearchDirectory (AssemblyNameReference name, IEnumerable<string> directories, ReaderParameters parameters)
{
var extensions = new [] { ".exe", ".dll" };
foreach (var directory in directories) {
foreach (var extension in extensions) {
string file = Path.Combine (directory, name.Name + extension);
if (File.Exists (file))
return GetAssembly (file, parameters);
}
}
return null;
}
有没有办法让它来比较运行时(Silverlight vs .NET)?还有其他方法可以解决这个问题吗?让它使用Metadata version?
是明智的吗?答案 0 :(得分:2)
塞西尔解决.NET程序集的问题比这更复杂。问题是您正在尝试使用的Cecil的DefaultAssemblyResolver不知道如何解析Silverlight程序集。它只知道库存.NET程序集。
有关自定义程序集解析过程的示例,请参阅Stack Overflow问题 Mono.Cecil fails to process a Silverlight 5 assembly 。