Ошибка WPF CS0433

Я получаю эту ошибку в своем приложении WPF. Я получаю эту ошибку не всегда. Если я делаю Clean, а затем Rebuild, все в порядке.

SGEN (0,0):                                             
error: Unable to generate a temporary class (result=1).

SGEN (0,0):
errorCS0433: The type 'XamlGeneratedNamespace.GeneratedInternalTypeHelper' exists in both 'library1.dll' and 'library2.dll'

person Pashec    schedule 01.10.2010    source источник


Ответы (5)


Вы можете использовать RummageTypeRenamer, бесплатный инструмент в комплекте с нашим обфускатором Rummage (я работаю на Aldaray) , чтобы переименовать тип GeneratedInternalTypeHelper во что-то другое.

Мы переименовываем его во что-то вроде GeneratedInternalTypeHelper$(ProjectName), чтобы он был уникальным для разных проектов и никогда не конфликтовал. Мы делаем это во всех наших сценариях сборки, чтобы заставить ILMerge работать (запись в блоге моего коллеги). частный блог).

person Timwi    schedule 04.10.2012
comment
Работал на меня. Я поместил его в пост-сборку, как здесь. - person Andrey K.; 29.11.2016

Вот статья Скотта Хансельмана, в которой обсуждается эта проблема для WPF.

Другие люди, столкнувшиеся с этой проблемой, исправили ее, установив некоторые исправления. Прочтите эту статью для получения дополнительной информации.

Если вы используете Citrix, вы можете проверить это. У вас может быть проблема с разрешениями. В этой конкретной статье рассматривается приложение ASP .NET, но аналогичная проблема может возникнуть и в вашем приложении WPF. Это хорошее место для начала.

person Robert Greiner    schedule 01.10.2010
comment
Я не использую Цитрикс. Не уверен, что это из-за исправлений, представленных в упомянутой статье. Я получил эту ошибку только сегодня. Он работал идеально в течение нескольких месяцев. - person Pashec; 02.10.2010

Эта ошибка возникает из-за постоянного скомпилированного генератора сборок XML-сериализации. Он генерирует классы из сериализуемых XML-типов. Если вы не используете это, вы можете снять этот флажок в свойствах проекта.

person codekaizen    schedule 01.10.2010
comment
В одном проекте я не использую генератор сборки XML-сериализации, поэтому отключаю его. Это помогло. Но мне все еще любопытно, почему это произошло и как это исправить, если мне нужно будет запустить sgen в обоих проектах. - person Pashec; 02.10.2010

Я попытался выяснить, почему в моей библиотеке есть сгенерированный класс XamlGeneratedNamespace.GeneratedInternalTypeHelper. MSDN не говорит ничего полезного:

Класс, созданный дизайнером рабочего процесса, используемый для создания типов CLR для документов XAML.

Но я нашел строку кода, которая вызывает генерацию этого класса:

<Grid DataContext="{TemplateBinding InternalDataContext}">

Я заменил его на «эквивалент времени выполнения»:

<Grid DataContext="{Binding InternalDataContext, RelativeSource={RelativeSource TemplatedParent}}">

Может быть, это может помочь кому-то.

person Pashec    schedule 06.10.2010

вы можете найти сгенерированный код XmlSerializer в c:\Users\\AppData\Local\Temp\ после запуска вашего приложения, это будет something.cs. У меня было: «me2ywucq.0.cs», просто текстовый поиск имени вашего типа внутри его кода.

Вы также можете изменить путь, по которому он записывает код при создании сборок во время выполнения. Сборки Скотта
Добавьте в файл app.config или web.config следующее:

<system.xml.serialization> 
  <xmlSerializer tempFilesLocation="c:\\foo"/> 
</system.xml.serialization> 

Найдя код, вы можете скомпилировать его самостоятельно в myAssembly.XmlSerializers.dll или реализовать IXmlSerializer в своем коде, не нарушая совместимости с предыдущими сериализациями.

person Amitbe    schedule 24.12.2012