#.net #dynamic #razor #assemblies
#.net #динамический #razor #сборки
Вопрос:
У меня есть настройка, в которой классы моделей MVC создаются «на лету» в контроллере, обслуживающем запрос через CodeDomProvider, как в следующем коде:
//model source is properly structured C# code
CodeDomProvider cdProvider = CodeDomProvider.CreateProvider("CSharp");
CompilerParameters cParams = new CompilerParameters();
cParams.GenerateInMemory = false;
cParams.TreatWarningsAsErrors = false;
cParams.WarningLevel = 4;
cParams.OutputAssembly = string.Format(@"{0}{1}", Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), modelNamespace ".dll");
cParams.ReferencedAssemblies.AddRange(modelFrameworkReferences.ToArray());
try
{
CompilerResults cResults = cdProvider.CompileAssemblyFromSource(cParams, modelSource);
modelAssembly = cResults.CompiledAssembly;
// omitted for brevity....
}
Это работает нормально, и модель генерируется (и кэшируется для последующего использования), а затем ее экземпляр создается с помощью modelAssembly.CreateInstance.
В проекте также используется пользовательская реализация VirtualPathProvider и VirtualFile для обслуживания разметки Razor view из некоторого внешнего хранилища. Часть поиска работает нормально, но когда фреймворком компилируется представление Razor, компиляция завершается с ошибкой, поскольку представление ссылается на тип в динамически сгенерированной сборке.
Просмотр командной строки компиляции представления для csc.exe показывает, что ссылка на динамически сгенерированную библиотеку не включена в командную строку, даже если сгенерированная сборка загружена в appdomain (проверяется путем перечисления сборок), а разметка представления содержит соответствующую директиву @using, ссылающуюся на пространство имен сгенерированной сборки.
Можно ли что-то сделать, чтобы гарантировать, что ссылки на динамически сгенерированные типы сборок используются для компиляции представления?
Я понимаю, что могу использовать подход динамической модели и что я могу иметь все динамически сгенерированные классы моделей, производные от предопределенного (нединамического) интерфейса, на который могут ссылаться представления, но по разным причинам я хотел бы иметь ссылку на саму динамически сгенерированную модель.