#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>