Pergunta

Eu estou usando 3.5 SP1 na minha máquina, enquanto os nossos clientes usam atualmente 3.5 sem SP1. Eu não sei de qualquer maneira no VS2008 para direcionar a solução ou projeto para 3.5 sem SP1, apenas o 3.5 com SP1 Eu tenho instalado.

Se usarmos funções ou construtores não disponível em 3,5 w / o SP1 o código não funcionará corretamente.

Isto é, eu quero detectar em tempo de compilação que não iria funcionar sem o SP1.

Até agora, temos teste feito (em uma máquina virtual ou máquina separada) para ver se as quebras de aplicação, e se quebra por vezes, quando nós usamos partes do API não está disponível até SP1. O problema é que ela só quebra quando o código efectivamente executado (em tempo de execução), não quando o conjunto é carregado.

Uma solução seria ter uma máquina com VS2008 w / o SP1 e tentar compilar o projeto. No entanto eu prefiro alguma ferramenta para me ajudar a detectar uma dependência para 3.5 SP1 (devido à utilização de novas API, ou qualquer outro), ou através da análise do código-fonte, ou as montagens que produzimos.

meu Google poderes não foi forte o suficiente com essa questão, alguma dica?

Foi útil?

Solução

Eu só tive o mesmo problema, e eu encontrei uma solução. Para a nossa aplicação, que era uma chamada para System.Threading.WaitHandle.WaitOne (Int32) que nos ficou em apuros. Para mais detalhes sobre como referências a da API que foram introduzidos no Service Pack lançamentos podem vazar em seu código sem Visual perceber Studio, consulte Krzysztof Cwalina pós .

A boa notícia é que, como Marc mencionado é sua resposta, FxCop tem uma novo regra que detecta esses vazamentos. A má notícia é que a regra é quebrada em FxCop 1,36 quando você alvo .NET Framework 3.5. No entanto, David Kean descreve como editar um par de arquivos de configuração XML para corrigir o problema . Eu segui as instruções, e FxCop agora detecta minhas referências a service pack do API.

Outras dicas

Como cerca de este ? (Regras multi-targetting para FxCop)

Você pode usar o código encontrado aqui para detectar Quadros .NET instalado.

string Fx35RegistryKey = @ "Setup HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework \ NDP \ v3.5"; objeto Fx35ServicePack = Registry.GetValue (Fx35RegistryKey, "SP", null);

if ( "é necessária NET Framework 3.5 SP1.".) (Fx35ServicePack == null || (int) Fx35ServicePack <1) throw new Exception;

Não há outra opção que eu não tentei. A documentação Visual Studio diz que você pode fazer o seu instalador ClickOnce especificamente alvo o .NET framework 3.5SP1. Siga o link e procurar "Segmentação .NET Framework Versão 3.5 SP1". Essencialmente, ele diz fazer qualquer um dos seguintes irá forçar o instalador para instalar 3.5SP1:

  • Especifique uma URL de erro na caixa de diálogo Opções de publicação.
  • Especifique um nome Suíte na caixa de diálogo Opções de publicação.
  • Criar um atalho na caixa de diálogo Opções de publicação.
  • Excluir um arquivo a partir do hash na caixa de arquivos de aplicativos de diálogo.
  • caixa de seleção
  • Desmarque a assinar o ClickOnce manifestos na página de assinatura.
  • Adicione uma referência para o System.Data.Entity montagem.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top