Я нашел решение. Действительно, из генератора кода можно получить ссылку на объект Visual Studio Project.
Я нашел код для получения ссылки на проект здесь: http://subversion.assembla.com/svn/mistral-framework/trunk/src/VisualStudio/Mistral.VisualStudio.XmlClassGenerator/BaseCodeGeneratorWithSite.cs
Затем следующий метод возвращает ссылку на объект сборки, который мы можем использовать для отражения всех доступных типов и т. Д. С помощью отражения.
private static Assembly GetAssembly(Project project, string assemblyName)
{
Microsoft.VisualStudio.OLE.Interop.IServiceProvider oleSP =
project.DTE as Microsoft.VisualStudio.OLE.Interop.IServiceProvider;
ServiceProvider sp = new ServiceProvider(oleSP);
DynamicTypeService dts =
sp.GetService(typeof(DynamicTypeService)) as DynamicTypeService;
Microsoft.VisualStudio.Shell.Interop.IVsSolution sln =
sp.GetService(typeof(SVsSolution)) as IVsSolution;
Microsoft.VisualStudio.Shell.Interop.IVsHierarchy hier = null;
sln.GetProjectOfUniqueName(project.UniqueName, out hier);
ITypeResolutionService rs = dts.GetTypeResolutionService(hier);
return rs.GetAssembly(new AssemblyName(assemblyName), true);
}
Для метода по-прежнему требуется имя сборки, что хорошо в моем случае, поскольку я могу читать его из базового файла XML для генерации. Тем не менее, я уверен, что вы можете получить ссылку и без названия. (Я просто ленился и прекратил расследование, когда заставил его работать; -)