Исключение UWP только в режиме выпуска

#c# #uwp #.net-standard

#c# #uwp #.net-стандартный

Вопрос:

Я пытаюсь загрузить XmlReader в систему.ServiceModel.Синдикация.SyndicationFeed и это вызывает исключение только в режиме выпуска, но работает в режиме отладки

загружаемый код

 using (var xmlReader = XmlReader.Create(new StringReader(stringXML), new XmlReaderSettings { Async = true, IgnoreWhitespace = true, IgnoreComments = true }))
{
    System.ServiceModel.Syndication.SyndicationFeed feed = System.ServiceModel.Syndication.SyndicationFeed.Load(xmlReader);
}
  

исключение

 System.Reflection.MissingRuntimeArtifactException: ‘Cannot retrieve a MethodInfo for this delegate because the method it targeted (System.ServiceModel.Syndication.SyndicationFeedFormatter.DefaultUriParser(XmlUriData, Uriamp;)) was not enabled for metadata using the Dynamic attribute. For more information, please visit https://go.microsoft.com/fwlink/?LinkID=616868’
  

и содержимое xml https://mspoweruser.com/feed

Комментарии:

1. Когда вы создаете версию выпуска, вы тестируете. ЧИСТАЯ собственная сборка вашего приложения. Совсем другое, это компилятор с опережением времени, который сервер хранилища использует перед отправкой двоичных файлов пользователю вашего приложения. Отражение — это единственная функция, которая, как правило, плохо работает в этом сценарии, google «ошибки компиляции .net native», чтобы узнать, как использовать rd.xml

2. Вы перешли по ссылке в сообщении об ошибке? Это приведет вас к мастеру, который записывает rd.xml для тебя.

3. я сделал, и я думал, что это касается только UWP, но этот сбой кода в другом проекте, построенном на .net standard, пока Ханс Пассант не указал, что я должен искать ошибки компиляции .net native, и тогда я знал, что это влияет на все

Ответ №1:

добавление этого кода в Default.rd.xml файл устраняет проблему

 <Library Name="SyndicationFeed">
  <Assembly Name="System.ServiceModel.Syndication" Activate="Required All" Browse="Required All" Serialize="Required All" Dynamic="Required All" />
  <Namespace Name="System.ServiceModel.Syndication" Dynamic="Required All" />
</Library>
  

после </Application> и до </Directives>