Visual Studio для переопределения файла в выбранной конфигурации сборки - PullRequest
0 голосов
/ 31 марта 2020

на данный момент у моего проекта есть файл лицензии. Расширение не прикреплено к файлу. Сам файл содержит только ключ.

У меня есть 3 конфигурации сборки

Dev
Stage
Prod

На данный момент у меня есть 4 лицензионных файла.

GLicense 

GLicense_dev
GLicense_stage
GLicense_prod

Я пытался использовать # c директива препроцессора, но сторонняя dll требует от меня, чтобы имя лицензии было точно таким же, как GLicense. Следующим подходом, который я собирался применить, было переопределение содержимого GLicense при сборке. Мне было интересно, как насчет этого?

Ответы [ 2 ]

2 голосов
/ 01 апреля 2020

Я верю, что правильный ответ - использовать $(TargetDir) против $(ProjectDir)$(OutDir) в "copy To". Вы не хотите, чтобы упоминание $(ProjectDir) было справа. Что, если ваш вывод находится за пределами вашей папки проекта, может быть даже другой компьютер. Кроме того, вместо изменения файла проекта в проекте XML, вы можете просто открыть свойства и в «событиях сборки» добавить это единственное событие

if $(ConfigurationName) == dev copy /y "$(ProjectDir)GLicense_dev" "$(TargetDir)GLicense"
if $(ConfigurationName) == stage copy /y "$(ProjectDir)GLicense_stage" "$(TargetDir)GLicense"
if $(ConfigurationName) == prod copy /y "$(ProjectDir)GLicense_prod" "$(TargetDir)GLicense"

другим способом (и это действительно решение Visual Studio, поскольку оно устраняет CMD / Пакетное кодирование. Недостатком в вашем случае является то, что у вас есть 3 разных файла с одинаковым именем в 3 разных папках), добавьте ваши 3 файла в проект как содержимое в 3 разных папках, но имя файла - одинаковое (GLicense). И выберите «Копировать всегда» в действии сборки. Затем в файле проекта XML добавьте Condition=" '$(Configuration)' == 'dev' к самому файлу, а не к группе свойств

<None Include="dev\GLicense" Condition=" '$(Configuration)' == 'dev'>
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="stage\GLicense" Condition=" '$(Configuration)' == 'stage'>
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="prod\GLicense" Condition=" '$(Configuration)' == 'prod'>
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
1 голос
/ 31 марта 2020

Измените командную строку Pre-build ваших проектов, включив в нее требуемый исходный файл для каждой конфигурации

copy /y "$(ProjectDir)GLicense_dev" "$(ProjectDir)$(OutDir)GLicense"

copy /y "$(ProjectDir)GLicense_stage" "$(ProjectDir)$(OutDir)GLicense"

copy /y "$(ProjectDir)GLicense_prod" "$(ProjectDir)$(OutDir)GLicense"

Ваш файл Project будет выглядеть примерно так

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'dev|AnyCPU' ">
  <PreBuildEvent>copy /y "$(ProjectDir)GLicense_dev.txt" "$(ProjectDir)$(OutDir)GLicense.txt"</PreBuildEvent>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'stage|AnyCPU' ">
  <PreBuildEvent>copy /y "$(ProjectDir)GLicense_stage.txt" "$(ProjectDir)$(OutDir)GLicense.txt"</PreBuildEvent>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'prod|AnyCPU' ">
  <PreBuildEvent>copy /y "$(ProjectDir)GLicense_prod.txt" "$(ProjectDir)$(OutDir)GLicense.txt"</PreBuildEvent>
</PropertyGroup>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...