NHibernate MappingException: не удалось скомпилировать документ сопоставления - PullRequest
7 голосов
/ 15 июля 2010

В моем веб-приложении для разработчиков NHibernate работает просто отлично. При предварительной компиляции и развертывании сайта я получаю исключение MappingException при создании SessionFactory.

Вот некоторая информация из трассировки:

NHibernate.Cfg.Environment 2010-07-15 09: 20: 59,577 [7] ИНФОРМАЦИЯ NHibernate.Cfg.Environment [(null)] - NHibernate 2.1.2.4000 (2.1.2.4000) 0.452436832055471 0.232383 NHibernate.Cfg.Environment 2010-07-15 09: 20: 59,718 [7] ИНФО NHibernate.Cfg.Environment [(null)] - байт-код Название провайдера: lcg 0.522780409241957 0.070344 NHibernate.Cfg.Environment 2010-07-15 09: 20: 59,734 [7] ИНФО NHibernate.Cfg.Environment [(null)] - Использование оптимизатор отражения 0,529107470362853 0,006327 NHibernate.Cfg.Configuration 2010-07-15 09: 20: 59,827 [7] INFO NHibernate.Cfg.Configuration [(null)] - Отображение ресурс: Kctc.BusinessLayer.Mappings.StoredWill.hbm.xml 0.623336485503046 0.094229 NHibernate.Dialect.Dialect 2010-07-15 09: 21: 00,109 [7] INFO NHibernate.Dialect.Dialect [(null)] - Использование диалект: NHibernate.Dialect.MsSql2008Dialect 0.91570185596214 0.292365 NHibernate.Cfg.Configuration 2010-07-15 09: 21: 01,390 [7] ОШИБКА NHibernate.Cfg.Configuration [(null)] - Возможно не компилировать документ сопоставления: Kctc.BusinessLayer.Mappings.StoredWill.hbm.xml NHibernate.MappingException: не удалось скомпилировать документ сопоставления: Kctc.BusinessLayer.Mappings.StoredWill.hbm.xml ---> System.InvalidOperationException: невозможно создать временный класс (Результат = 1). ошибка CS2001: исходный файл 'C: \ WINDOWS \ TEMP \ shp2uoc8.0.cs' не удалось найти ошибку CS2008: не указаны входные данные

at System.Xml.Serialization.Compiler.Compile (родительский узел сборки, строка ns, XmlSerializerCompilerParameters xmlParameters, свидетельство доказательства) в System.Xml.Serialization.TempAssembly.GenerateAssembly (XmlMapping [] xmlMappings, Type [] types, String defaultNamespace, Доказательства, Параметры XmlSerializerCompilerParameters, Сборка сборки, Hashtable сборки) в System.Xml.Serialization.TempAssembly..ctor (XmlMapping [] xmlMappings, Type [] types, String defaultNamespace, String location, Evidence доказательства) в System.Xml.Serialization.XmlSerializer.GenerateTempAssembly (XmlMapping xmlMapping, Type type, String defaultNamespace) в System.Xml.Serialization.XmlSerializer..ctor (Тип, Строка defaultNamespace) в System.Xml.Serialization.XmlSerializer..ctor (Тип тип) в NHibernate.Cfg.XmlHbmBinding.Binder.Deserialize [T] (узел XmlNode) в NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.Bind (узел XmlNode) в NHibernate.Cfg.Configuration.AddValidatedDocument (NamedXmlDocument doc) --- конец трассировки стека внутренних исключений --- 2.20609881982207 1.290397 Ошибка необработанного выполнения Не удалось скомпилировать документ сопоставления: Kctc.BusinessLayer.Mappings.StoredWill.hbm.xml в NHibernate.Cfg.Configuration.LogAndThrow (исключение исключения) в NHibernate.Cfg.Configuration.AddValidatedDocument (NamedXmlDocument doc) в NHibernate.Cfg.Configuration.ProcessMappingsQueue () в NHibernate.Cfg.Configuration.AddDocumentThroughQueue (NamedXmlDocument документ) в NHibernate.Cfg.Configuration.AddXmlReader (XmlReader hbmReader, String name) в NHibernate.Cfg.Configuration.AddInputStream (Stream xmlInputStream, Имя строки) в NHibernate.Cfg.Configuration.AddResource (String путь, сборка в сборе) на NHibernate.Cfg.Configuration.AddAssembly (сборка сборки) в Kctc.BusinessLayer.NHibernateSessionFactory.get_SessionFactory () в C: \ Kctc \ Trunk \ Kctc.BusinessLayer \ NHibernateSessionFactory.cs: строка 26
в Kctc.BusinessLayer.NHibernateSessionFactory.OpenSession () в C: \ Kctc \ Trunk \ Kctc.BusinessLayer \ NHibernateSessionFactory.cs: строка 39
в Developers_Test.ListSquirps (Отправитель объекта, EventArgs e) в System.Web.UI.WebControls.Button.OnClick (EventArgs e) вSystem.Web.UI.WebControls.Button.RaisePostBackEvent (String eventArgument) в System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent (строковое событие Argument) в System.WebRaiseP.IPostBackEventHandler sourceControl, String eventArgument) в System.Web.UI.Page.RaisePostBackEvent (NameValueCollection postData)
в System.Web.UI.Page.ProcessRequestMain (логическое значение includeStagesBeforeAsync * 1012321, 0563, 0561, 0, 102, 102, 0, 56, 0, 102,,,,,,,,,)* Это говорит мне о том, что файл сопоставления содержит ошибку или не может быть найден.Но если приложение dev работает нормально, как может возникнуть проблема с файлом сопоставления, когда он предварительно скомпилирован и развернут?!

У кого-нибудь есть предложения относительно того, что здесь может происходить?

Спасибо

Ответы [ 2 ]

15 голосов
/ 15 июля 2010

Хорошо, я понял.Классу XmlSerializer, который вызывается при создании SessionFactory, необходим доступ на запись в (по умолчанию) C: \ Windows \ TEMP, чтобы он мог сгенерировать некоторые вещи и разбить их там.

В качестве альтернативы, вы можете следоватьхак в этом блоге http://www.hanselman.com/blog/ChangingWhereXmlSerializerOutputsTemporaryAssemblies.aspx. Это меняет расположение по умолчанию, в котором XmlSerializer хранит свой шизнит.Все, что вам нужно сделать, это добавить следующий элемент в элемент конфигурации вашего файла web.config / app.config:

<system.xml.serialization>
  <xmlSerializer tempFilesLocation="C:\SomeFolder\SomeOtherFolder\WhereeverYouWant"/>
</system.xml.serialization>

Первое решение выглядит как проблема безопасности, а второе - какнеуклюжий взлом с трудно предсказуемыми последствиями.

Почему это так плохо документировано?

3 голосов
/ 15 июля 2010

Убедитесь, что файл .hbm.xml определен как встроенный ресурс в вашем проекте.

...