Detectar Framework 3.5 SP1 de dependência (CMP. 3.5 W / o SP1)
-
04-07-2019 - |
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?
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.