0

MSBuildタスクからMono.Cecilを使用していますが、アセンブリを解決する方法に問題が発生しました。Silverlightバージョンではなく.NETバージョンのPrismを採用しています。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と.NET)を比較する方法はありますか?問題を回避する他の方法はありますか?メタデータバージョンを使用するのは賢明ですか?

4

1 に答える 1

2

Cecilが.NETアセンブリを解決するために行うことは、それよりも複雑です。問題は、使用しようとしているCecilのDefaultAssemblyResolverが、Silverlightアセンブリを解決する方法を認識していないことです。在庫の.NETアセンブリについてのみ知っています。

アセンブリ解決プロセスのカスタマイズの例については、 StackOverflowの質問Mono.CecilがSilverlight5アセンブリの処理に失敗するを参照してください。

于 2012-10-08T11:46:25.137 に答える