Как добавить и скомпилировать пользовательский переключатель «Платформа» для визуальных студийных проектов? - PullRequest
1 голос
/ 05 ноября 2008

Мы собираемся предоставить два пользовательских коммутатора платформы ( платформа в диспетчере конфигурации) для наших проектов в Visual Studio .

Например, один для «рабочего стола» и один для «Интернета». Затем целевые задачи сборки компилируют код нестандартным способом на основе переключателя платформы. Мы не хотим добавлять к переключателю Debug Release, потому что они нам нужны для каждой настольной и веб-платформ.

Мы нашли один из способов сделать это: изменить файл .csproj, добавив что-то вроде этого

<Platform Condition=" '$(Platform)' == '' ">Desktop</Platform>

и добавьте группы свойств, например,

    <PropertyGroup Condition=" '$(Platform)' == 'Web' ">
        <DefineConstants>/define Web</DefineConstants>
        <PlatformTarget>Web</PlatformTarget>
      </PropertyGroup>
      <PropertyGroup Condition=" '$(Platform)' == 'Desktop' ">
        <DefineConstants>/define Desktop</DefineConstants>
        <PlatformTarget>Desktop</PlatformTarget>
      </PropertyGroup>

Но все равно это не работает, и компилятор выдает ошибку

Неверный параметр «Рабочий стол» для / платформы; должно быть anycpu, x86, Itanium или x64

Так должен ли быть один из этих вариантов, и мы не можем добавить наши пользовательские платформы?

Кто-нибудь мог это сделать? любые указатели были бы полезны.

Обновление: использование DebugDesktop и ReleaseDesktop сделает его более сложным для пользователей. Поскольку «рабочий стол» и «веб» на самом деле являются платформами, а также есть возможность добавлять новые платформы в раскрывающемся меню (т. Е.), Я считаю, что переключатель «платформа» следует использовать для точно такой же цели.

Ответы [ 5 ]

5 голосов
/ 24 июня 2011

Может быть, эта тема будет интересна кому-то через три года. У меня были похожие трудности с настройкой платформ сборки и их разрешением.

Ошибка, которую вы дали, возникла из-за того, что свойство PlatformTarget было установлено с помощью Desctop, а не из-за свойства Platform. Эти два свойства имеют немного различное значение. Первый действительно в конечном итоге инструктирует всех участников процесса сборки, какую архитектуру процесса следует использовать, а второй позволяет настраивать обстоятельства сборки внутри IDE.

Когда проект создается в Visual Studio, свойство ProcessTarget может быть установлено по умолчанию с AnyCPU в PropertyGroups, которые имеют условные ограничения, например " '... | $ (Platform)' == '... | AnyCPU '». Но это не заставляет вас делать то же самое. Свойство ProcessTarget можно легко установить с помощью свойства AnyCPU for Platform, имеющего другие значения.

Учитывая вышеизложенное, ваш образец может выглядеть так:

<PropertyGroup Condition=" '$(Platform)' == 'Web' ">
    <DefineConstants>Web</DefineConstants>
    <PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'Desktop' ">
    <DefineConstants>Desktop</DefineConstants>
    <PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>

это должно работать.

Надеюсь, это полезно для вас.

1 голос
/ 05 ноября 2008

Вы должны иметь возможность использовать диалоговое окно Configuration Manager для создания новых платформ.

1 голос
/ 08 июня 2010

Я недавно задал тот же вопрос, и кажется, что с Visual Studio 2010 вы можете определить свои собственные платформы проекта. (См. http://blogs.msdn.com/b/vcblog/archive/2008/11/20/printf-hello-msbuild-n.aspx). К сожалению, мы все еще используем 2008.

0 голосов
/ 06 августа 2015

Ищите это тоже ... Но согласно https://msdn.microsoft.com/en-us/library/bb629394.aspx, единственными допустимыми значениями для движка MSBuild являются "Любой процессор", "x86" и "x64". Эта настройка действительно поддерживается?

0 голосов
/ 05 ноября 2008

Переименуйте «Debug» и «Release» в «Debug Desktop» и «Release Desktop» и скопируйте их в имена «Debug Web» и «Release Web». Затем настройте свои константы таким образом.

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