Problema com arquivos C # geradas dinamicamente em msbuild
Pergunta
Eu tenho um arquivo XML de origem que é usado para criar arquivos de C #, que são então compilados como parte de um projeto.
Atualmente tenho um alvo BeforeBuild que corre meu XML para C conversor #.
O problema é que no momento em que o passo BeforeBuild é executado os arquivos antigos parecem ter sido armazenado pelo sistema de compilação para os novos arquivos são ignorados.
Como posso resolver isso? Parece que transforma seria o caminho, mas eles são limitados no que podem fazer.
Solução
Eu acho que o seu "armazenados pelo sistema de construção" pode ser traduzido como a ItemGroup contendo os arquivos .cs que deseja compilação é gerado quando o arquivo msbuild é lido, ao contrário de quando o seu alvo de compilação é executado. Você tem várias opções:
- <CreateItem> ver href="http://msdn.microsoft.com/en-us/library/s2y3e43x.aspx" rel="nofollow noreferrer"> CreateItem tarefa
- <Output> ver href="http://msdn.microsoft.com/en-us/library/ms164287.aspx" rel="nofollow noreferrer"> elemento de saída
Espero que isso ajude.
Outras dicas
Bem, temos algo semelhante-ish aqui. Nós gen um .cs fora um arquivo xml usando um .tt. Ambos os arquivos são parte de um csproj específico. Indo Propriedades-> BuildEvents no csproj dá a este pequeno trecho na linha de comando evento pré-compilação:
del "$(ProjectDir)MyCsFile.cs"
copy /b /y "$(ProjectDir)\MyXmlFile.xml" "$(TargetDir)"
"$(ProjectDir)tt.bat" "$(ProjectDir)MyTemplateFile.tt"
Não faço ideia se isso é de qualquer utilidade para você, espero que pode ser suficiente como uma última solução acaso.
Eu acho que você precisa para nos mostrar um pouco do seu arquivo de regras / build. Você deve ter uma regra / dependência para o arquivo de cs que tem o xml como a dependência.
Eu não tenho certeza que você entende por "armazenados pelo sistema de compilação"
Verifique suas regras cuidadosamente para erros / omissões.