Почему мой проект Visual Studio Win32 требует .NET 3.5 SP1 для установки? - PullRequest
5 голосов
/ 20 апреля 2009

Используя Visual Studio 2008, я создал проект C ++ Win32 . Чтобы выпустить программу, я создал проект установки Visual Studio в том же решении.

setup.exe предлагает моим пользователям установить .NET 3.5 с пакетом обновления 1 (SP1), который часто занимает более 15 минут и разрешен только для учетных записей администратора. Если они этого не делают, то возникает ошибка «неправильная структура». Я запутался из-за того, что в моем проекте требуется .NET 3.5 SP1. Я подозреваю, только потому, что это фреймворк, на котором установлен мой компьютер ... Есть ли способ расширить, на каких фреймворках он будет работать?

Код в основном состоит из вызовов Win32 API. На всякий случай, вот мои зависимости и #includes:

gdiplus.lib
comctl32.lib
Winmm.lib
d3d9.lib

(Проект установки автоматически добавил comdlg32.dll, а затем велит мне исключить его.)

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <string.h>

#include <commctrl.h>
#include <process.h>
#include <sstream>
#include <math.h>
#include <d3d9.h>
#include <time.h>
#include <gdiplus.h>

Я предполагаю, что где-то в windows.h есть WIN_VER или аналогичный параметр версии, установленный на .NET 3.5 SP1, и именно отсюда и возникает зависимость. Если это так, и мне нужно определить другую версию, я хотел бы услышать совет от всех о том, что можно / нельзя делать и как, и как далеко я могу пойти для максимального включения.

Ответы [ 4 ]

3 голосов
/ 30 ноября 2010

В моем случае я исправил все проблемы, которые позволял мне пользовательский интерфейс, предварительные требования, общие свойства ... Не важно, все еще хотелось .NET 3.5.

Итак, я открыл файл vdproj в slickedit и изменил его напрямую. Изменено

    "ExternalPersistence"
    {
        "LaunchCondition"
        {
            "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_38ABBBBC51344AFFA38F2922DFFFE5B5"
            {
            "Name" = "8:.NET Framework"
            "Message" = "8:[VSDNETMSG]"
            "Version" = "8:3.5.30729"
            "AllowLaterVersions" = "11:FALSE"
            "InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=76617"
            }
        }
    }

до

    "ExternalPersistence"
    {
    }

И он перестал запрашивать .NET 3.5

3 голосов
/ 20 апреля 2009

В VS 2008 целевым фреймворком по умолчанию является .NET 3.5.

Для C ++ на странице «Общие свойства» есть выпадающий список «Targeted Framework», но в тестовом проекте, который я создал, он выделен серым цветом, поэтому, похоже, его нельзя изменить после создания проекта.

Я создал второй проект C ++ и выбрал шаблон 2.0 в диалоговом окне «Новый проект», который имел 2.0 в «Targeted Framework».

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

РЕДАКТИРОВАТЬ: На какую версию фреймворка вы должны ориентироваться - все зависит (!)

Вам нужно использовать какие-либо функции 3.0 или 3.5? Если нет то иди на 2.0. Если вы это сделаете, то выберите этот и принять хит загрузки. Я не могу сказать, насколько вероятно, что у любого класса пользователей будет установлена ​​конкретная версия. С течением времени будет все более вероятно, что у них будет установлен 3.5, как того требуют другие приложения.

3 голосов
/ 20 апреля 2009

Вы проверили предварительные условия в проекте установки? (Щелкните правой кнопкой мыши -> Свойства ; кнопка Предварительные требования).

В созданном мной тестовом проекте .NET Framework выбран по умолчанию (я предполагаю, что он фактически не анализирует устанавливаемые проекты, так как по умолчанию он не включает библиотеки времени выполнения C ++.)

0 голосов
/ 20 апреля 2009

Что ж, для проектов C #, если вы щелкнете правой кнопкой мыши по файлу проекта в обозревателе решений и перейдете в Свойства, вы можете изменить Целевую платформу на вкладке «Приложение». В свойствах проекта C ++ может быть что-то похожее.

...