Pergunta

Estou tentando obter uma meta cara única para executar apenas ao criar um determinado projeto de nível superior (que possui muitas dependências).

Não tenho nenhum problema em fazer isso funcionar com a compilação simples de linha de comando msbuild / comando. Eu faço isso com a configuração e os alvos iniciais do projeto, ou alternativamente com

<Antes da construção />.

A parte complicada é com o Visual Studio. Quando eu construo o mesmo projeto de vs. O VS executa as dependências antes mesmo de invocar meu .csproj, então meu alvo (que afeta a forma como os outros projetos são construídos) não pode funcionar até que já tenham sido construídos.

Existe de alguma forma para forçar o VS a executar um alvo antes de invocar as dependências?

Atualmente, estou trabalhando em torno disso, executando a mesma meta cara do meu projeto de mais baixo nível (o que é sempre construído ...) usando:

Condição = "$ (BuildingInsideVisualStudio)"

Alguma idéia de como fazer isso "corretamente"? Novamente, estou procurando uma solução que funcione de vs.

Foi útil?

Solução

A única maneira de fazer isso (se eu entendi a pergunta) é criar um projeto fictício, que você informa ao VS para construir primeiro, que faz o que quiser. O VS aceitará praticamente qualquer arquivo msbuild se você fornecer uma extensão .csproj e o destino de construção.

Outras dicas

O Visual Studio usa um compilador no Proc para ajudar no UX do processo de construção. Porque disso, pode haver alguma diferença entre VS e MSBuild. Tente definir a propriedade UseHostCompilerifailable como false em seu arquivo de projeto. Isso forçará vs a usar o msbuild para a construção. A desvantagem é o desempenho dentro do Visual Studio.

Você usaria o Follwing Fragege no seu arquivo .csproj (ou .vbProj).

<PropertyGroup>
    <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>
</PropertyGroup>

Por que não substituir o <Target Name="BeforeBuild" /> alvo? Que será executado antes da construção real do projeto (uma vez que o Build alvo depende BeforeBuild). O Visual Studio está chamando o alvo de construção (ou reconstrução), então substituir esse alvo no .csproj fará com que ele seja chamado primeiro.

A menos que você esteja procurando fazer algo mais cedo do que isso no msbuild?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top