Alterações de quebra do MSBuild no .NET Core 2.1 - 3.1
As seguintes alterações estão documentadas nesta página:
Quebrando a mudança | Versão introduzida |
---|---|
As compilações em tempo de design retornam apenas referências de pacotes de nível superior | 3.1 |
Alteração de nome de arquivo de manifesto de recurso | 3.0 |
Ferramentas de projeto agora incluídas no SDK | 2.1 |
.NET Core 3.1
As compilações em tempo de design retornam apenas referências de pacotes de nível superior
A partir do .NET Core SDK 3.1.400, somente referências de pacote de nível superior são retornadas RunResolvePackageDependencies
pelo destino.
Versão introduzida
SDK do .NET Core 3.1.400
Alterar a descrição
Em versões anteriores do SDK do .NET Core, o RunResolvePackageDependencies
destino criou os seguintes itens do MSBuild que continham informações do arquivo de ativos do NuGet:
PackageDefinitions
PackageDependencies
TargetDefinitions
FileDefinitions
FileDependencies
Esses dados são usados pelo Visual Studio para preencher o nó Dependências no Gerenciador de Soluções. No entanto, pode ser uma grande quantidade de dados e os dados não são necessários, a menos que o nó Dependências seja expandido.
A partir do SDK do .NET Core versão 3.1.400, a maioria desses itens não é gerada por padrão. Apenas os itens do tipo Package
são devolvidos. Se o Visual Studio precisar dos itens para preencher o nó Dependências, ele lê as informações diretamente do arquivo de ativos.
Razão para a alteração
Essa alteração foi introduzida para melhorar o desempenho de carga de solução dentro do Visual Studio. Anteriormente, todas as referências de pacote eram carregadas, o que envolvia o carregamento de muitas referências que a maioria dos usuários nunca visualizaria.
Ação recomendada
Se você tiver lógica MSBuild que depende desses itens que estão sendo criados, defina a EmitLegacyAssetsFileItems
propriedade como true
em seu arquivo de projeto. Essa configuração habilita o comportamento anterior onde todos os itens são criados.
Categoria
MSBuild
APIs afetadas
N/A
.NET Core 3.0
Alteração de nome de arquivo de manifesto de recurso
A partir do .NET Core 3.0, no caso padrão, o MSBuild gera um nome de arquivo de manifesto diferente para arquivos de recurso.
Versão introduzida
3.0
Alterar a descrição
Antes do .NET Core 3.0, se nenhum , ou metadados foram especificados para um EmbeddedResource
item no arquivo de projeto, o MSBuild gerou um nome de arquivo de manifesto no padrão <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources
.DependentUpon
ManifestResourceName
LogicalName
Se RootNamespace
não estiver definido no arquivo de projeto, o padrão será o nome do projeto. Por exemplo, o nome de manifesto gerado para um arquivo de recurso chamado Form1.resx no diretório raiz do projeto foi MyProject.Form1.resources.
A partir do .NET Core 3.0, se um arquivo de recurso for colocalizado com um arquivo de origem com o mesmo nome (por exemplo, Form1.resx e Form1.cs), o MSBuild usará informações de tipo do arquivo de origem para gerar o nome do arquivo de manifesto no padrão <Namespace>.<ClassName>.resources
. O namespace e o nome da classe são extraídos do primeiro tipo no arquivo de origem colocalizado. Por exemplo, o nome de manifesto gerado para um arquivo de recurso chamado Form1.resx que é colocalizado com um arquivo de origem chamado Form1.cs é MyNamespace.Form1.resources. A principal coisa a observar é que a primeira parte do nome do arquivo é diferente das versões anteriores do .NET Core (MyNamespace em vez de MyProject).
Nota
Se você tiver LogicalName
, ManifestResourceName
, ou DependentUpon
metadados especificados em um EmbeddedResource
item no arquivo de projeto, essa alteração não afetará esse arquivo de recurso.
Essa alteração de quebra foi introduzida com a EmbeddedResourceUseDependentUponConvention
adição da propriedade aos projetos .NET Core. Por padrão, os arquivos de recursos não são explicitamente listados em um arquivo de projeto .NET Core, portanto, eles não DependentUpon
têm metadados para especificar como nomear o arquivo .resources gerado. Quando EmbeddedResourceUseDependentUponConvention
é definido como true
, que é o padrão, o MSBuild procura um arquivo de origem colocalizado e extrai um namespace e um nome de classe desse arquivo. Se você definir EmbeddedResourceUseDependentUponConvention
como false
, o MSBuild gerará o nome do manifesto de acordo com o comportamento anterior, que combina RootNamespace
e o caminho do arquivo relativo.
Ação recomendada
Na maioria dos casos, nenhuma ação é necessária por parte do desenvolvedor, e seu aplicativo deve continuar a funcionar. No entanto, se essa alteração quebrar seu aplicativo, você poderá:
Altere seu código para esperar o novo nome de manifesto.
Desative a nova convenção de nomenclatura definindo
EmbeddedResourceUseDependentUponConvention
comofalse
no arquivo de projeto.<PropertyGroup> <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention> </PropertyGroup>
Categoria
MSBuild
APIs afetadas
N/A
.NET Core 2.1
Ferramentas de projeto agora incluídas no SDK
O SDK do .NET Core 2.1 agora inclui ferramentas comuns da CLI, e você não precisa mais fazer referência a essas ferramentas do projeto.
Alterar a descrição
No .NET Core 2.0, os projetos fazem referência a ferramentas externas do .NET com a configuração do <DotNetCliToolReference>
projeto. No .NET Core 2.1, algumas dessas ferramentas estão incluídas no SDK do .NET Core e a configuração não é mais necessária. Se você incluir referências a essas ferramentas em seu projeto, receberá um erro semelhante ao seguinte: A ferramenta 'Microsoft.EntityFrameworkCore.Tools.DotNet' agora está incluída no SDK do .NET Core.
Ferramentas agora incluídas no SDK do .NET Core 2.1:
<Valor DotNetCliToolReference> | Ferramenta |
---|---|
Microsoft.DotNet.Watcher.Tools |
dotnet-watch |
Microsoft.Extensions.SecretManager.Tools |
dotnet-user-secrets |
Microsoft.Extensions.Caching.SqlConfig.Tools |
dotnet-sql-cache |
Microsoft.EntityFrameworkCore.Tools.DotNet |
DOTNET-EF |
Versão introduzida
SDK do .NET Core 2.1.300
Ação recomendada
Remova a <DotNetCliToolReference>
configuração do seu projeto.
Categoria
MSBuild
APIs afetadas
N/A