Pergunta

Aqui está o cenário:

projeto A # Aplicação C do Windows armazenado no SVN é usado para criar um executável. Normalmente, um servidor de compilação lida com o processo de construção e cria constrói em intervalos regulares que são usadas testando. Neste caso particular me pediram para modificar uma compilação específica e criar o arquivo executável.

Eu não sou inteiramente certo se as modifica servidor de compilação os arquivos do projeto, mas eu sei que isso cria um tag no SVN do código-fonte que usado para compilar os executáveis. Usando essa tag Eu verifiquei o código em uma segunda máquina, que é uma máquina de desenvolvimento. Eu, então, compilados a fonte na máquina de desenvolvimento.

Quando executado, o aplicativo que foi compilado na máquina de desenvolvimento não funciona exatamente como o que compilado pelo servidor de compilação. Por exemplo, nas máquinas de teste um execption datetime de análise é detectado pela aplicação. No entanto, executável da máquina de construção não lançar quaisquer exeptions. Se eu executar o arquivo executável na máquina de desenvolvimento sem exceções são jogados.

Então, em resumo, ambas as máquinas são, teoricamente, usando o mesmo código fonte e projetos.
executável do máquina de desenvolvimento só funciona na máquina dev. obras executáveis ??da máquina de compilação em cada máquina, incluindo a máquina de dev.

Você Zona Configurações Regional ou Time da máquina armazenado no executável compilado? Alguma idéia o que poderia causar este comportamento ou como verificar os executáveis ??para encontrar as possíveis diferenças e corrigi-los?

Infelizmente, não posso dar uma máquina de teste e anexar um depurador a ele. Assim que eu puder eu vou.

Foi útil?

Solução

O aplicativo usa as configurações da máquina que está sendo executado Regionais, e parece que ele é o seu problema. Você pode forçar um fio de usar uma cultura específica, definindo System.Threading.Thread.CurrentThread.CurrentCulture e System.Threading.Thread.CurrentThread.CurrentUICulture para um valor específico.

Outras dicas

É possível que as duas máquinas têm diferentes versões de uma dll subjacente que não faz parte do seu processo de construção. Eu já vi isso acontecer quando distribuir serviços em toda a nossa fazenda servidor interno.

Você pode executar o programa na máquina de compilação sob um depurador?

Se sim, então depurar o problema - não há necessidade de adivinhar

.

Tenha o depurador no prendedor máquina dev a exceção, definir um ponto de interrupção no mesmo lugar na máquina de compilação. Veja o que é diferente entre os dois.

Eu vi diferente "Opções regionais e de idioma" na XP causa este tipo de comportamento. Será que estes jogo em ambas as máquinas? Iniciar | configurações | Painel de Controle | Opções regionais e de idioma ...

Eu tenho algumas perguntas - que ambas as máquinas têm configurações regionais idênticos e onde estão os seus logs de erros? Espero ;-) você exceções sendo manipulados e gravados no disco, logs de eventos .. algo para ajudar com problemas como este.

Onde é que a data vem que está sendo analisado? Se ele está em seu db talvez você tenha dados ruins também.

Eu tive um problema semelhante uma vez (exceto em C ++) Quando eu comparei os tamanhos dos executáveis ??compilados, eles estavam longe. Infelizmente, depois de dias de busca, a melhor solução que eu encontrei foi para desinstalar VS05 e reinstale-o.

Por que você está usando um servidor de compilação de qualquer maneira, para o código C #, se posso perguntar?

Os tempos de compilação para C #, quando eu estava usando eram dificilmente perceptíveis (<2s). É o aplicativo realmente tão grande?

O sistema de compilação provavelmente faz uma versão de lançamento, enquanto a construção manual no PC dev faz uma versão de depuração. A versão de depuração tem mais a verificação de erros na mesma. Veja se você pode construir manualmente uma versão de lançamento e ver se ainda existem diferenças.

O mesmo código fonte raramente se cada constrói o mesmo programa em diferentes computadores. Você deve sempre assumir os programas são diferentes, não esperar que eles sejam o mesmo. Em um ambiente como o linux com um gerente bom pacote e periódica e ou alterações aleatórias, nunca espera o mesmo código fonte para construir o mesmo programa no mesmo computador também. Quanto maior a linguagem pior fica. Construção de um programa para o depurador é drasticamente diferente do que construir para a liberação. A versão do depurador, mesmo sem as peles depurador erros que você não vai encontrar até que você vá para a compilação de lançamento. Você basicamente obter para depurar o programa duas vezes se você confiar demais em um ambiente depurador.

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