GetTargetFrameworks ()
{
return frameworks.Values;
}
foreach (TargetFrameworkNode node in AddinManager.GetExtensionNodes ("/MonoDevelop/Core/Frameworks")) {
TargetFramework fx = node.CreateFramework ();
В общем, знание фреймворка тут как-то сбоку. Над осмотреть где считывается AssemblyContext
AssemblyContext
https://github.com/mono/monodevelop/blob/master/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Assemblies/AssemblyContext.cs
Есть пять классов - SystemPackage, SystemAssembly, SystemPackageInfo, PackageAssemblyInfo, LibraryPackageInfo
В SystemPackage есть коллекция Assemblies (это говорит нам о том, что Package это что-то такое, внутри чего есть несколько сборок)
У класса AssemblyContext есть метод RegisterPackage
https://github.com/mono/monodevelop/blob/master/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Assemblies/DirectoryAssemblyContext.cs#L100-L107
void RegisterPcFile (string file)
{
LibraryPackageInfo pinfo = MonoTargetRuntime.PcFileCache.GetPackageInfo (file);
if (pinfo.IsValidPackage) {
SystemPackage sp = RegisterPackage (pinfo, true);
packages.Add (sp);
}
}
Список директорий, откуда считывать .pc-файлы берется из переменной окружения ${PKG_CONFIG_PATH}
https://github.com/mono/monodevelop/blob/master/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Assemblies/MonoTargetRuntime.cs#L208-L222
private void ParsePCFile (string pcfile)
{
// Don't register the package twice
string pname = Path.GetFileNameWithoutExtension (pcfile);
if (RuntimeAssemblyContext.GetPackageInternal (pname) != null || IsCorePackage (pname))
return;
LibraryPackageInfo pinfo = PcFileCache.GetPackageInfo (pcfile);
if (pinfo.IsValidPackage)
RuntimeAssemblyContext.RegisterPackage (pinfo, false);
}
https://github.com/mono/monodevelop/blob/master/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Assemblies/PcFileCache.cs#L143-L175
https://github.com/mono/monodevelop/blob/master/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Assemblies/PcFileCache.cs#L143-L175
TP ParsePackageInfo (string pcfile)
{
PcFile file = new PcFile ();
file.Load (pcfile);
...
public void PcFile.Load (string pcfile)
такой же код как в monodevelop есть и в самом mono
https://github.com/mono/mono/blob/master/mcs/class/Mono.XBuild.Tasks/Mono.XBuild.Tasks/PcFileCache.cs
Вопрос - почему его не вынесли в отдельный проект? Ну возьми и вынеси...