O Azure Data Lake Analytics está a atualizar para o .NET Framework v4.7.2
Importante
O Azure Data Lake Analytics descontinuado a 29 de fevereiro de 2024. Saiba mais com este anúncio.
Para análise de dados, a sua organização pode utilizar o Azure Synapse Analytics ou o Microsoft Fabric.
O runtime predefinido do Azure Data Lake Analytics está a ser atualizado de .NET Framework v4.5.2 para .NET Framework v4.7.2. Esta alteração apresenta um pequeno risco de interrupção de alterações se o código U-SQL utilizar assemblagens personalizadas e essas assemblagens personalizadas utilizarem bibliotecas .NET.
Esta atualização do .NET Framework 4.5.2 para a versão 4.7.2 significa que o .NET Framework implementado num runtime U-SQL (o runtime predefinido) será sempre 4.7.2. Não existe uma opção lado a lado para .NET Framework versões.
Após a conclusão desta atualização para o .NET Framework 4.7.2, o código gerido do sistema será executado como versão 4.7.2. As bibliotecas fornecidas pelo utilizador, como as assemblagens personalizadas U-SQL, serão executadas no modo retrocompatível adequado à versão para a qual a assemblagem foi gerada.
- Se os DLLs de assemblagem forem gerados para a versão 4.5.2, a arquitetura implementada irá tratá-los como bibliotecas 4.5.2, fornecendo (com algumas exceções) semântica 4.5.2.
- Agora, pode utilizar assemblagens personalizadas U-SQL que utilizam as funcionalidades da versão 4.7.2, se segmentar o .NET Framework 4.7.2.
Devido a esta atualização para o .NET Framework 4.7.2, existe um potencial para introduzir alterações interruptivas nas tarefas U-SQL que utilizam assemblagens personalizadas .NET. Sugerimos que verifique se existem problemas de retrocompatibilidade com o procedimento abaixo.
Como verificar se existem problemas de retrocompatibilidade
Verifique se existem potenciais problemas de quebra de retrocompatibilidade ao executar as verificações de compatibilidade .NET no código .NET nas assemblagens personalizadas U-SQL.
Nota
A ferramenta não deteta alterações interruptivas reais. identifica apenas as chamadas APIs .NET que podem (para determinadas entradas) causar problemas. Se receber uma notificação de um problema, o código poderá continuar a estar em bom estado. No entanto, deve verificar mais detalhes.
- Execute o verificador de retrocompatibilidade nas DLLs .NET através de
- Utilizar a Extensão do Visual Studio na Extensão do Visual Studio .NET Portability Analyzer
- Transferir e utilizar a ferramenta autónoma do GitHub dotnetapiport. As instruções para executar a ferramenta autónoma estão em Alterações interruptivas do dotnetapiport do GitHub
- Para 4.7.2. compatibilidade,
read isRetargeting == True
identifica possíveis problemas.
- Se a ferramenta indicar se o código pode ser afetado por qualquer uma das possíveis incompatibilidades anteriores (alguns exemplos comuns de incompatibilidades estão listados abaixo), pode verificar mais detalhadamente
- Analisar o código e identificar se o código está a transmitir valores para as APIs afetadas
- Efetue uma verificação de runtime. A implementação do runtime não é efetuada lado a lado no ADLA. Pode efetuar uma verificação de runtime antes da atualização, utilizando a execução local do VisualStudio com um .NET Framework 4.7.2 local num conjunto de dados representativo.
- Se, de facto, for afetado por uma incompatibilidade retroativa, siga os passos necessários para corrigi-la (como corrigir os dados ou a lógica de código).
Na maioria dos casos, não deve ser afetado pela incompatibilidade retroativa.
Linha cronológica
Pode verificar a implementação do novo runtime aqui Resolução de problemas do Runtime e ao analisar qualquer tarefa com êxito anterior.
E se não conseguir rever o meu código a tempo
Pode submeter a sua tarefa em relação à versão de runtime antiga (criada com o objetivo 4.5.2), no entanto, devido à falta de .NET Framework capacidades lado a lado, esta continuará a ser executada apenas no modo de compatibilidade 4.5.2. Ainda poderá encontrar alguns dos problemas de retrocompatibilidade devido a este comportamento.
Quais são os problemas de retrocompatibilidade mais comuns que pode encontrar
As incompatibilidades retroativas mais comuns que é provável que o verificador identifique são (gerámos esta lista ao executar o verificador nas nossas próprias tarefas internas do ADLA), que as bibliotecas são afetadas (nota: pode chamar as bibliotecas apenas indiretamente, pelo que é importante tomar as medidas necessárias n.º 1 para verificar se as suas tarefas são afetadas) e possíveis ações para remediar. Nota: Em quase todos os casos para os nossos próprios trabalhos, os avisos revelaram-se falsos positivos devido às naturezas estreitas da maioria das alterações interruptivas.
A propriedade IAsyncResult.CompletedSynchronously tem de estar correta para a tarefa resultante ser concluída
- Ao chamar TaskFactory.FromAsync, a implementação da propriedade IAsyncResult.CompletedSynchronously tem de estar correta para a tarefa resultante ser concluída. Ou seja, a propriedade tem de devolver verdadeiro se, e apenas se, a implementação for concluída de forma síncrona. Anteriormente, a propriedade não estava selecionada.
- Bibliotecas Afetadas: mscorlib, System.Threading.Tasks
- Ação Sugerida: Garantir que TaskFactory.FromAsync devolve verdadeiro corretamente
DataObject.GetData obtém agora dados como UTF-8
- Para aplicações que visam o .NET Framework 4 ou que são executadas no .NET Framework 4.5.1 ou versões anteriores, DataObject.GetData obtém dados formatados em HTML como uma cadeia ASCII. Como resultado, os carateres não ASCII (carateres cujos códigos ASCII são maiores do que 0x7F) são representados por dois carateres aleatórios.#N##N#For aplicações que visam o .NET Framework 4.5 ou posterior e são executados no .NET Framework 4.5.2,
DataObject.GetData
obtém dados formatados em HTML como UTF-8, que representa carateres maiores do que 0x7F corretamente. - Bibliotecas Afetadas: Glo
- Ação Sugerida: certifique-se de que os dados obtidos são o formato pretendido
- Para aplicações que visam o .NET Framework 4 ou que são executadas no .NET Framework 4.5.1 ou versões anteriores, DataObject.GetData obtém dados formatados em HTML como uma cadeia ASCII. Como resultado, os carateres não ASCII (carateres cujos códigos ASCII são maiores do que 0x7F) são representados por dois carateres aleatórios.#N##N#For aplicações que visam o .NET Framework 4.5 ou posterior e são executados no .NET Framework 4.5.2,
XmlWriter lança em pares de substituição inválidos
- Para aplicações que visam o .NET Framework 4.5.2 ou versões anteriores, escrever um par de substituição inválido utilizando o processamento de contingência de exceções nem sempre gera uma exceção. Para aplicações que visam o .NET Framework 4.6, tentar escrever um par de substituição inválido gera um
ArgumentException
. - Bibliotecas Afetadas: System.Xml, System.Xml. Leitor de Leitura
- Ação Sugerida: certifique-se de que não está a escrever um par de substituição inválido que causará uma exceção de argumento
- Para aplicações que visam o .NET Framework 4.5.2 ou versões anteriores, escrever um par de substituição inválido utilizando o processamento de contingência de exceções nem sempre gera uma exceção. Para aplicações que visam o .NET Framework 4.6, tentar escrever um par de substituição inválido gera um
HtmlTextWriter não compõe
<br/>
o elemento corretamente- A partir do .NET Framework 4.6, chamar
HtmlTextWriter.RenderBeginTag()
e com um<BR />
elemento irá inserir corretamente apenas um<BR />
(emHtmlTextWriter.RenderEndTag()
vez de dois) - Bibliotecas Afetadas: System.Web
- Ação Sugerida: certifique-se de que está a inserir a quantidade de
<BR />
que espera ver para que não seja visto qualquer comportamento aleatório na tarefa de produção
- A partir do .NET Framework 4.6, chamar
A chamada CreateDefaultAuthorizationContext com um argumento nulo foi alterada
- A implementação do AuthorizationContext devolvida por uma chamada para o
CreateDefaultAuthorizationContext(IList<IAuthorizationPolicy>)
com um argumento authorizationPolicies nulo alterou a sua implementação no .NET Framework 4.6. - Bibliotecas Afetadas: System.IdentityModel
- Ação Sugerida: certifique-se de que está a lidar com o novo comportamento esperado quando existe uma política de autorização nula
- A implementação do AuthorizationContext devolvida por uma chamada para o
O RSACng carrega agora corretamente chaves RSA de tamanho de chave não padrão
- No .NET Framework versões anteriores à versão 4.6.2, os clientes com tamanhos de chave não padrão para certificados RSA não conseguem aceder a essas chaves através dos
GetRSAPublicKey()
métodos eGetRSAPrivateKey()
da extensão. ÉCryptographicException
emitida uma mensagem com a mensagem "O tamanho da chave pedida não é suportado". Com a .NET Framework 4.6.2, este problema foi corrigido. Da mesma forma,RSA.ImportParameters()
eRSACng.ImportParameters()
agora trabalha com tamanhos de chave não padrão sem atirarCryptographicException
"s". - Bibliotecas Afetadas: mscorlib, System.Core
- Ação Sugerida: Certifique-se de que as chaves RSA estão a funcionar conforme esperado
- No .NET Framework versões anteriores à versão 4.6.2, os clientes com tamanhos de chave não padrão para certificados RSA não conseguem aceder a essas chaves através dos
As verificações de dois pontos de caminho são mais rigorosas
- No .NET Framework 4.6.2, foram efetuadas muitas alterações para suportar caminhos anteriormente não suportados (tanto no comprimento como no formato). As verificações da sintaxe do separador de unidade (dois pontos) adequada foram mais corretas, o que teve o efeito colateral de bloquear alguns caminhos de URI em algumas APIs de Caminho selecionadas onde costumavam ser toleradas.
- Bibliotecas Afetadas: mscorlib, System.Runtime.Extensions
- Ação Sugerida:
Chamadas para construtores ClaimsIdentity
- A partir do .NET Framework 4.6.2, há uma alteração na forma como
T:System.Security.Claims.ClaimsIdentity
os construtores com umT:System.Security.Principal.IIdentity
parâmetro definem aP:System.Security.Claims.ClaimsIdentify.Actor
propriedade. Se oT:System.Security.Principal.IIdentity
argumento for umT:System.Security.Claims.ClaimsIdentity
objeto e aP:System.Security.Claims.ClaimsIdentify.Actor
propriedade desseT:System.Security.Claims.ClaimsIdentity
objeto nãonull
for , aP:System.Security.Claims.ClaimsIdentify.Actor
propriedade é anexada através doM:System.Security.Claims.ClaimsIdentity.Clone
método . No Framework 4.6.1 e versões anteriores, aP:System.Security.Claims.ClaimsIdentify.Actor
propriedade é anexada como uma referência existente. Devido a esta alteração, começando pela .NET Framework 4.6.2, aP:System.Security.Claims.ClaimsIdentify.Actor
propriedade do novoT:System.Security.Claims.ClaimsIdentity
objeto não é igual àP:System.Security.Claims.ClaimsIdentify.Actor
propriedade do argumento doT:System.Security.Principal.IIdentity
construtor. No .NET Framework 4.6.1 e versões anteriores, é igual. - Bibliotecas Afetadas: mscorlib
- Ação Sugerida: Certifique-se de que ClaimsIdentity está a funcionar conforme esperado no novo runtime
- A partir do .NET Framework 4.6.2, há uma alteração na forma como
A serialização de carateres de controlo com DataContractJsonSerializer é agora compatível com ECMAScript V6 e V8
- No .NET Framework 4.6.2 e versões anteriores, o DataContractJsonSerializer não serializou alguns carateres de controlo especiais, como \b, \f e \t, de uma forma compatível com as normas ECMAScript V6 e V8. A partir do .NET Framework 4.7, a serialização destes carateres de controlo é compatível com eCMAScript V6 e V8.
- Bibliotecas Afetadas: System.Runtime.Serialization.Json
- Ação Sugerida: Garantir o mesmo comportamento com DataContractJsonSerializer