2011-01-10 2 views
3

Я построил программу на C# .NET 2.0, которая отлично работает и в рамках фреймворков 3.0 и 3.5.. Конфигурация «Любая инфраструктура»

Но если .NET Framework 4.0 является единственной установленной инфраструктурой, она не работает, она требует, чтобы пользователь установил 2.0.

я нашел следующую конфигурацию в гугле:

<startup> 
    <requiredRuntime safemode="true" imageVersion="v4.0.30319" version="v4.0.30319"/> 
</startup> 

После добавления этого к app.config, моя программа работает на платформе .NET Framework 4.0 без каких-либо проблем!

Что я ищу - это конфигурация .NET Any Framework, которая запускает мою программу под .NET 2.0, если она установлена, или же в .NET 4.0.

Как это сделать?

+0

Я не уверен, что это возможно без * два * различные сборки (один .NET2, один .NET4). .NET4 использует другое время выполнения/ядро, чем .NET2/3/3.5 (например, это не просто проблема нового .NET API), поэтому, если нет какой-то волшебной опции, требующей CLR2 * или * CLR4, которые я никогда не слышал из ... может быть еще несколько дьявольских методов, таких как использование прокси-исполняемого файла для загрузки лучшего/только CLR, а затем изображения. Я не знаю :-) –

ответ

2

Найденный!

Вот конфигурация для всех, кто в ней нуждается:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
    <supportedRuntime version="v2.0.50727"/> 
    <supportedRuntime version="v4.0.30319" sku=".NETFramework,Version=v4.0,Profile=Client" /> 
    </startup> 
</configuration> 
+0

Если он все еще не работает, обязательно добавьте AppName.exe.config с вашим приложением (т. е. иметь его в той же папке) при его распространении. Я думал, что конфиг встроен в .exe, но это не так. – blade

+0

Подробнее об этом здесь: http://www.codeproject.com/Articles/886256/NET-versioning-and-multi-targeting-on-Csharp-appli –

0

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

перейти к проекту установки изменить целевую структуру до 2.0 и я, что это играть же даже пользователь имеет 2.0 или 4.0 Net Framework в их системе

3

Это не работает без конфигурации дизайн. В .NET 4 используется другое время выполнения, и когда вы загружаете сборку .NET 2, по умолчанию она загружает ее в версии 2 CLR. Вы можете перенастроить его, чтобы предотвратить это поведение, и загрузить его в v4 CLR, но это не всегда хорошая идея. Это заставляет код, который вы пишете, запускать в каркасе, отличном от того, на котором он был спроектирован и протестирован, что потенциально может быть проблематичным.

Как правило, проще установить правильные требования к системе. Установка .NET 2 очень проста (и поставляется по умолчанию в Vista +). Преимущество этого заключается в том, что вы запускаете свою программу на платформе, для которой она была разработана.

1

очень сложно найти машину, на которой установлено только 4.0. Совместимые версии .NET 2.0 предварительно установлены на компьютерах Vista и Win7, они будут запускать вашу программу без сбоев. У вас должен быть девственный компьютер с XP, который никогда не был установлен .NET. Возможно, ядро ​​сервера. В этом случае кто-то сделал ошибку, установив неверную версию .NET.

Не знаете, как это произошло, пахнет проблемой общения. Может быть, вы не должны оставлять это кому-то еще, чтобы понять это неправильно. Когда системные требования для вашего приложения включают поддержку XP, вам лучше убедиться, что он доступен. Довольно просто с проектом установки.

В противном случае ваш app.config неверно, <requiredRuntime> был устаревшим с .NET 1.0. Правильное заклинание - <requestedRuntime> и спросите как 2.0.50727, так и 4.0

Смежные вопросы