Что у меня есть
MyGraphicsLibrary.Content.Pipeline.dll
public class MyModelProcessor { }
public class MyModelContent { }
[ContentTypeWriter]
public class MyModelContentWriter : ContentWriter<MyModelContent>
{
protected override void Write(ContentWriter output, MeshDataContent value)
{
value.Write(output);
}
public override string GetRuntimeType(TargetPlatform targetPlatform)
{
return "MyGraphicsLibrary.MyModel, MyGraphicsLibrary";
}
public override string GetRuntimeReader(TargetPlatform targetPlatform)
{
return "MyGraphicsLibrary.MyModelReader, MyGraphicsLibrary";
}
}
MyGraphicsLibrary.dll: строго названо
public class GraphicsDeviceControl : System.Windows.Forms.Panel { }
public class MyModel { }
public class MyModelReader : ContentTypeReader<MyModel> { }
GraphicsDeviceControl
основан на этот образец XNA .
ActiveXApplication.dll: строго назван, зарегистрирован для COM-взаимодействия
[Guid("")]
[ProgId("ActiveXApplication.ActiveXControl")]
[ComVisible(true)]
public class ActiveXControl : System.Windows.Forms.UserControl { }
public class MyGraphicsDeviceControl : MyGraphicsLibrary.GraphicsDeviceControl { }
ActiveXControl
является основным пользовательским интерфейсом приложения I 'встраивание в IE7 / 8 с тегом <object>
.Сайт, на котором размещен элемент управления, был добавлен в доверенные сайты.MyGraphicsDeviceControl
загружает модели на основе информации, переданной на ActiveXControl
с веб-страницы.Загруженные модели были созданы из моделей FBX с MyModelProcessor
и написаны с MyModelContentWriter
.В настоящее время я использую XNA 3.0.
Проблема
Когда MyGraphicsDeviceControl
выполняет следующую строку:
this.contentManager.Load<MyModel>("modelName")
Я получаю следующую ошибку:
Ошибка загрузки «pathToModel \ modelName».Не удается найти ContentTypeReader MyGraphicsLibrary.MyModelReader, MyGraphicsLibrary.
Эта ошибка не возникает при использовании ActiveXControl
в приложении Windows Forms.При использовании классов модели XNA по умолчанию ошибка не возникает (я пытаюсь использовать класс пользовательской модели, а не злоупотреблять свойством Tag класса модели XNA).Используя Reflector, я проследил через ContentManager.Load<T>
в поисках источника исключения и обнаружил, что это происходит, когда XNA пытается вызвать Type.GetType()
, используя строку, определенную в MyModelContentWriter.GetRuntimeReader()
, которая возвращает ноль.
Вопрос
Есть мысли о том, почему Type.GetType () возвращает ноль при попытке загрузить MyModelReader, а не ModelReader XNA при работе в IE?
ОБНОВЛЕНИЕ:
Изучив эту проблему еще раз, я смог найти способ загрузить свой пользовательский класс модели при работе в IE.Добавив обработчик для AppDomain.AssemblyResolve
, я смог вернуть сборку, содержащую MyModelReader
, что позволило успешно выполнить вызов Type.GetType()
в коде XNA.
На основе информации, которую я прочитал о Reflection и сборкезагружая, я предполагаю, что смог использовать класс модели XNA без проблем, потому что сборки XNA зарегистрированы в GAC, где, как у меня, нет.Однако MyGraphicsLibrary.dll
уже был загружен в AppDomain
, поэтому я не совсем уверен, почему не удалось разрешить сборку.Я предполагаю, что это как-то связано с контекстом, в котором он был загружен, но я не уверен, в какой контекст загружаются сборки при работе в IE.