У меня есть два довольно простых проекта C#: исполняемый файл, который может быть построен либо как x86, либо как AnyCPU, который ссылается (через <ProjectReference>
) на проект DLL, который имеет только конфигурацию AnyCPU. Все это работает, как и ожидалось, в Visual Studio.
Я пытаюсь собрать x86-версию исполняемого проекта (и его зависимостей) из командной строки с /p:Platform="x86"
. Это приводит к сбою сборки проекта DLL. (В то время как /p:Platform="AnyCPU"
работает, по-видимому, потому, что он действителен для обоих проектов.)
Полная командная строка, которую я использую:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild MyProject\MyProject.csproj /t:Build /p:Configuration="Release" /p:Platform="x86"
Какие есть варианты заставить эту сборку работать из командной строки? Желательно вообще не изменять проект DLL или изменять проекты таким образом, чтобы это мешало их обычному использованию в Visual Studio.
(Конечной целью здесь является пакетный файл, который может создать чистую версию проекта для распространения.)
Дополнительная информация:
Оба проекта имеют конфигурации «Отладка» и «Выпуск». Исполняемый проект имеет «x86» и «AnyCPU», доступные в разделе «Платформа». Проект DLL имеет только «AnyCPU», доступный в разделе «Платформа». Опция «Целевая платформа» соответствует «Платформе» во всех случаях. (Нет опции «Предпочитать 32-разрядную версию», так как я использую VS2010.)
Ошибка, по-видимому, связана с компиляцией («недопустимый небезопасный код») в DLL, которая, хотя я и не уверен на 100%, связана с тем, что ни один из элементов <PropertyGroup>
в проекте DLL не совпадает. (из-за Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "
и т. д.), которые бы указывали необходимые параметры для компиляции (например, AllowUnsafeBlocks
и DefineConstants
).
<PlatformTarget>
в файле проекта) соответствует платформе, указанной$(Platform)
(то есть: любой платформе, выбранной для сборки) обычным способом, который вы ожидаете для файлов проекта, например:<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
. Visual Studio прекрасно создаст комбинацию x86 EXE + AnyCPU DLL. Как я могу сделать это из командной строки? Предполагается возможность сборки EXE в обеих конфигурациях. - person Andrew Russell   schedule 06.10.2017<ProjectReference>
(было бы достаточно просто собрать DLL отдельно). Хотя я не уверен, насколько это практично. Но VS, очевидно, делает эту работу (платформа x86 solution использует платформу AnyCPU DLL project). - person Andrew Russell   schedule 06.10.2017$(Configuration)|$(Platform)
комбинации, которые вы передаете, и задать правильные настройки. Что больше похоже на обходной путь (также довольно болезненный, поскольку я пытаюсь избежать изменения файла проекта DLL). Я предполагаю, что это скорее вопрос о том, как работает<ProjectReference>
, чем вопрос об устранении ошибок. - person Andrew Russell   schedule 06.10.2017