Создание XMLSerializer в .NET выдает исключение - PullRequest
2 голосов
/ 22 июля 2010

У нас есть старое приложение asp, которое создает экземпляр видимого класса .NET com. В этом классе мы делаем сериализацию для сохранения нашего объекта в сеансе.

Когда я вызываю следующую строку кода в моем тестовом классе, она работает нормально.

var cereal = new XmlSerializer(couponApplicator.GetType());

Однако, когда он вызывается на веб-сайте, и я отлаживаю, он выдает следующую ошибку:

{"Cannot execute a program. The command being executed was \"C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\csc.exe\" /noconfig /fullpaths @\"C:\\WINDOWS\\TEMP\\rwot-yx9.cmdline\"."}  System.SystemException {System.Runtime.InteropServices.ExternalException}

Я подумал, может быть, это связано с разрешениями, поэтому я попытался дать «КАЖДОМУ» полный контроль над папкой windows / microsoft.net, а также папкой windows / temp. Для справки, я запускаю это на компьютере с Windows XP. Есть идеи?

Ответы [ 2 ]

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

Разобрался.

Средство IIS Lockdown установило запрещающие разрешения для всех исполняемых файлов * .exe в каталоге windir. Поэтому мне пришлось удалить запретить права доступа к этим двум файлам в папке windows / microsoft.net / framework / v2.0 /

cvtres.exe

csc.exe

Затем я дал учетным записям IUSR и IWAM разрешения на чтение и выполнение как для этих файлов, так и для временного каталога Windows.

Вот отличный пост, объясняющий больше деталей: http://www.evilrob.org/journal/archives/2005/05/16/iusriwam-accoun.html

0 голосов
/ 22 июля 2010

Я обнаружил, что у меня проблемы с сериализационными сборками, так как я довольно часто использую XML-сериализацию для сохранения настроек приложения и т. Д., Когда я работаю с приложениями Windows.Что я обнаружил, так это то, что я намного успешнее развернул в среде LUA, создавая типы Serializer заранее, используя sgen, а не создавая их «на лету» во время выполнения.

Если вам действительно не нужно создавать их динамически во время выполнения, возможно, стоит разобраться.Это довольно прямолинейно.Просто создайте событие пост-сборки в вашем .NET-проекте, которое вызывает sgen для сборки, содержащей типы, которые вы хотите сериализовать (убедитесь, что они помечены [Serializable()]), просто включите сборку * .XmlSerializer, которая создается при развертываниии вам не нужно беспокоиться о каких-либо специальных разрешениях при использовании XmlSerializer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...