Respostas:
Os eventos pré e pós-compilação são executados como um script em lote. Você pode fazer uma declaração condicional em $(ConfigurationName)
.
Por exemplo
if $(ConfigurationName) == Debug xcopy something somewhere
Para sua informação, você não precisa usar o goto. O comando shell IF pode ser usado com colchetes:
if $(ConfigurationName) == Debug (
copy "$(TargetDir)myapp.dll" "c:\delivery\bin" /y
copy "$(TargetDir)myapp.dll.config" "c:\delivery\bin" /y
) ELSE (
echo "why, Microsoft, why".
)
"$(ConfigurationName)"
(aviso as aspas) se você obter o código de erro 255
$(ConfigurationName)
está vazio (linha de comando do evento pós-compilação). if "$(Configuration)" == "Debug"
trabalhou para mim. BTW, se você quiser fazer algo em todas as outras configurações, use if NOT "$(Configuration)" == "Debug"
.
Adicione seu evento de criação de postagem normalmente. Em seguida, salve seu projeto, abra-o no Bloco de notas (ou no seu editor favorito) e adicione condição ao grupo de propriedades PostBuildEvent. Aqui está um exemplo:
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<PostBuildEvent>start gpedit</PostBuildEvent>
</PropertyGroup>
cd "$(ProjectDir)"
expandido para cd ""
.
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="$(ConfigurationName) == Debug"> <Exec Command="your command"/></Target>
. Variáveis de macro e tudo funcionam normalmente.
Como alternativa (como os eventos são colocados em um arquivo em lotes e depois chamados), use o seguinte (na caixa de eventos Build, não em um arquivo em lotes):
if $(ConfigurationName) == Debug goto :debug
:release
signtool.exe ....
xcopy ...
goto :exit
:debug
' Debug items in here
:exit
Dessa forma, você pode ter eventos para qualquer configuração e ainda gerenciá-los com as macros, em vez de passar para um arquivo em lotes, lembre-se de que %1
é $(OutputPath)
etc.
Error 1 The command "C:\MyProject\postbuild.bat" exited with code 99. MyProject
if
e usargoto :$(ConfigurationName)
Visual Studio 2015: A sintaxe correta é (mantenha-a em uma linha):
if "$(ConfigurationName)"=="My Debug CFG" ( xcopy "$(TargetDir)test1.tmp" "$(TargetDir)test.xml" /y) else ( xcopy "$(TargetDir)test2.tmp" "$(TargetDir)test.xml" /y)
Nenhum erro 255 aqui.
No Visual Studio 2019, o .csproj
formato moderno suporta a adição de uma condição diretamente no Target
elemento:
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Debug'">
<Exec Command="nswag run nswag.json" />
</Target>
A interface do usuário não fornece uma maneira de configurar isso, mas parece deixar o Configuration
atributo com segurança se você fizer alterações por meio da interface do usuário.
Você pode passar o nome da configuração para o script pós-compilação e verificá-lo para ver se ele deve ser executado.
Passe o nome da configuração com $(ConfigurationName)
.
A verificação é baseada em como você está implementando a etapa pós-compilação - será um argumento da linha de comandos.
Isso funciona para mim no Visual Studio 2015.
Copio todos os arquivos DLL de uma pasta localizada em uma pasta da biblioteca no mesmo nível da pasta da minha solução no diretório de destino do projeto que está sendo criado.
Usando um caminho relativo do diretório do meu projeto e subindo a estrutura de pastas duas etapas com .. \ .. \ lib
MySolutionFolder
.... MyProject
Lib
if $(ConfigurationName) == Debug (
xcopy /Y "$(ProjectDir)..\..\lib\*.dll" "$(TargetDir)"
) ELSE (echo "Not Debug mode, no file copy from lib")
Como qualquer configuração de projeto, os eventos de construção podem ser configurados por Configuração. Basta selecionar a configuração que você deseja alterar na lista suspensa da caixa de diálogo Propriedades e editar a etapa de pós-compilação.
No Visual Studio 2012, você precisa usar (acho que também no Visual Studio 2010)
if $(Configuration) == Debug xcopy
$(ConfigurationName)
foi listado como uma macro, mas não foi atribuído.