Опасности вызова ICLRRuntimeInfo.BindAsLegacyV2Runtime во время выполнения - PullRequest
2 голосов
/ 31 января 2012

У меня есть приложение .NET, которое использует Crystal Reports.Одна из важных вещей, которая удерживала меня от перехода на .NET 4.0, заключается в том, что Crystal Reports не будет работать без следующих строк в файле app.config:

<startup useLegacyV2RuntimeActivationPolicy="true">
   <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>

Проблема заключается в том, что приложениеФайл .config содержит всевозможные другие параметры конфигурации, поэтому его нельзя просто перезаписать.И о ручном обновлении каждого клиентского ПК на самом деле не может быть и речи.

И даже если я пойду, как точно обновить файл на 100%, мне не нравится, когда эти вещи постоянно находятся там.Например, если бы мы когда-нибудь захотели перейти на .NET 5.0, это означало бы пройти и удалить строку version = "v4.0" из каждого файла конфигурации.

Я не понимаю, почему Microsoftпоместите этот тип конфигурации в файл app.config вместо файла манифеста или чего-то подобного, который может быть встроен непосредственно в исполняемый файл.

В любом случае, я наконец нашел человека, который привел пример того, каксконфигурируйте этот параметр во время выполнения, а не в файле конфигурации:

http://reedcopsey.com/2011/09/15/setting-uselegacyv2runtimeactivationpolicy-at-runtime/

Так в чем же заключается опасность установки свойства времени выполнения программно через ICLRRuntimeInfo.BindAsLegacyV2Runtime ()?Есть ли вероятность того, что Guid на ICLRRuntimeInfo изменится с каким-нибудь пакетом обновления .NET или чем-то еще?

Мне трудно представить, какие проблемы это может вызвать в будущем, и этонамного проще вытащить его обратно из исполняемого файла, чем пытаться обновить все файлы app.config, которые уже существуют.Так каковы возможные недостатки?

1 Ответ

0 голосов
/ 13 мая 2013

app.config - это то, что должно быть обновлено вместе с вашим исполняемым файлом и всеми другими файлами содержимого.Вы можете сделать это в любом случае.Есть несколько сборок, для которых работает только метод времени выполнения.

...