0

我正在使用MSBuild任务中的 Mono.Cecil,但在解决程序集的方式上遇到了问题。它正在选择.NET版本的Prism而不是 Silverlight。.NET 版本的 Prism 不包含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 与 .NET)?有没有其他方法可以解决这个问题?让它使用元数据版本是否明智?

4

1 回答 1

2

Cecil 为解析 .NET 程序集所做的工作比这更复杂。问题是您尝试使用的 Cecil 的 DefaultAssemblyResolver 不知道如何解析 Silverlight 程序集。它只知道股票 .NET 程序集。

请参阅 Stack Overflow 问题Mono.Cecil 无法处理 Silverlight 5 程序集,以获取程序集解析过程的自定义示例。

于 2012-10-08T11:46:25.137 回答