Как запустить приложение CLR 2 как приложение CLR 4 - PullRequest
8 голосов
/ 22 мая 2009

Допустим, у меня есть старое приложение, которое будет пытаться загрузить внешнюю сборку.

  • Старое приложение скомпилировано в CLR 2.
  • Новая сборка скомпилирована в CLR 4.

Я хотел бы иметь возможность запускать это старое приложение в CLR 4. Я помню, что была задействована некоторая XML-манифестация .

Как я могу создать этот XML-файл манифеста, чтобы сообщить, что oldapplication.exe будет работать под CLR 4?

Я нашел несколько предложений, но они, похоже, не работают для меня.

oldapplication.exe.config:

<?xml version ="1.0"?>
<configuration>
 <startup>
      <!--set the appropriate .net version-->
      <requiredRuntime version="4.0.0.0"/>
 </startup>
</configuration>

Когда я сделал еще один снимок, я обнаружил, что этот файл служит моим шаблоном:

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.20506 \ Aspnet_regsql.exe.config

<?xml version ="1.0"?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0.20506"/>
        <requiredRuntime version="v4.0.20506" safemode="true"/>
    </startup>
</configuration>

Я также обновил код, чтобы сообщить о текущем CLR:

Console.WriteLine(typeof(object).Assembly.ImageRuntimeVersion);

Теперь работает!

Ответы [ 3 ]

8 голосов
/ 22 мая 2009

Вам нужно указать правильный номер версии. Обратите внимание, что это бета-версия 1, она будет меняться до тех пор, пока не установится RTM:

<configuration>
 <startup>
      <supportRuntime version="4.0.20506"/>
 </startup>
</configuration>
1 голос
/ 15 января 2013

Для людей, которые нашли эту страницу через Google в 2013 году +

Конфигурационный файл Gist
https://gist.github.com/1223509

Сообщение в блоге
http://yzorgsoft.blogspot.com/2011/09/greenshot-on-windows-8-net-45.html

<?xml version ="1.0"?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0.30319" />
    <requiredRuntime version="v4.0.30319" safemode="true"/>
  </startup>
  <runtime>
    <relativeBindForResources enabled="true" />
    <UseSmallInternalThreadStacks enabled="true" />
    <DisableMSIPeek enabled="true"/>
  </runtime>
</configuration>

Этот файл конфигурации был извлечен из Visual Studio 2012, поэтому он имеет некоторые дополнительные COM-совместимость и настройки производительности. Для сред, в которых работает размещенный код, вам, вероятно, следует удалить раздел <runtime>.

1 голос
/ 22 мая 2009

Полагаю, вы хотите использовать поддерживаемое время выполнения, а не обязательное время выполнения.

"Элемент должен использоваться всеми приложениями, созданными с использованием версии 1.1 или более поздней версии среды выполнения." (http://msdn.microsoft.com/en-us/library/a5dzwzc9.aspx). Убедитесь, что строка версии точно соответствует «имени папки установки» для нужной версии.

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