Controlar a saída do arquivo pdb do arquivo de definição de compilação
Pergunta
Estou tentando gerar uma versão de lançamento sem nenhum arquivo pdb gerado.Tenho visto vários posts que sugerem clicar com o botão direito do mouse no projeto, selecionar Propriedades, ir para a aba Construir e depois para Avançado...butoon e alterando Debug Info para nenhum.Isso funciona e tudo, mas preciso fazer isso para uma compilação de cerca de 50 soluções que contenham cerca de 25 projetos cada!Outras postagens mencionam a edição do arquivo .csproj apropriado, mas, novamente, com tantos projetos, isso levaria muito tempo.Existe alguma maneira de conseguir isso através do arquivo TFSBuild.proj?
Tentei adicionar o seguinte ao arquivo TFSBuild.proj, sem sorte.
<PropertyGroup>
<Configuration>Release</Configuration>
<Platform>AnyCPU</Platform>
</PropertyGroup>
<PropertyGroup>
<DebugSymbols>false</DebugSymbols>
<DebugType>none</DebugType>
<Optimize>true</Optimize>
</PropertyGroup>
A linha a seguir imprime Release|AnyCPU, none e false, mas ainda vejo o arquivo .pdb na pasta $(OutputDir).
<Message Text="$Configuration|Platform): $(Configuration)|$(Platform)" />
<Message Text="DebugType is: $(DebugType)"/>
<Message Text="DebugSymbols is: $(DebugSymbols)"/>
Obrigado antecipadamente, urvi
Solução
Não tenho certeza (não tenho o team build instalado), mas é muito provável que quando você altera essas propriedades no projeto TFSBuild, elas não se propaguem para os arquivos reais do projeto, já que as soluções/projetos reais são construídos iniciando outra tarefa do MSBuild e o destino responsável em Microsoft.TeamFoundation.Build.targets não passa essas propriedades para a tarefa.
Por exemplo, este é o alvo "CallCompile" no arquivo mencionado (novamente, não tenho certeza se é isso que seu build usa o cenário, mas a ideia é a mesma):
<Target Name="CallCompile" DependsOnTargets="$(CoreCompileDependsOn)">
<!-- Pass in all properties that users might want during the course of the compile targets. -->
<MSBuild Projects="$(MSBuildProjectFile)"
Properties="a lot of properties, but not DebugSymbols etc"
Targets="CoreCompile">
</MSBuild>
</Target>
Então você poder consiga adicionar as propriedades desejadas ao arquivo de destino, mas:
- isso significa que você precisa alterar esse arquivo toda vez que atualizar
- pode não ser o comportamento desejado para todos os seus projetos
- por último, mas não menos importante:se os arquivos do projeto invocados também contiverem DebugSymbols/..., os valores das propriedades no seu arquivo simplesmente substituirão aqueles passados pela tarefa do MSBuild, portanto, no final, você ainda terá que alterar todos os arquivos do projeto para lidar com isso
Uma maneira de conseguir o que você deseja é escrever um script no idioma de sua escolha que liste todos os arquivos *.csproj em um determinado diretório e, em seguida, modifique cada arquivo para substituir verdadeiro por falso.Ou ainda mais rápido:faça uma pesquisa em *.csproj no explorer, abra todos os arquivos de uma vez em um editor e execute Localizar/Substituir em todos os arquivos abertos.